как подключиться к блютуз принтеру?

Я пытаюсь создать приложение для принтера Bluetooth. Теперь я установил простое соединение между своим телефоном и принтером Bluetooth. Я хочу, чтобы некоторые функции

  1. устанавливайте соединение каждый раз, когда я нажимаю кнопку печати. ​​Но я хочу устанавливать соединение на начальном этапе после каждого нажатия кнопки печати, которое сразу переходит к печати.
  2. показать только список сопряженных устройств, но я хочу также показать близлежащие
    устройства.

Что я пытаюсь

 print.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
            if (mBluetoothAdapter == null) {
                Toast.makeText(getContext(), "Message1", Toast.LENGTH_SHORT).show();
            } else {
                if (!mBluetoothAdapter.isEnabled()) {
                    Intent enableBtIntent = new Intent(
                            BluetoothAdapter.ACTION_REQUEST_ENABLE);
                    startActivityForResult(enableBtIntent,
                            REQUEST_ENABLE_BT);
                } else {
                    ListPairedDevices();
                    Intent connectIntent = new Intent(getContext(),
                            DeviceListActivity.class);
                    startActivityForResult(connectIntent,
                            REQUEST_CONNECT_DEVICE);
                }
            }
        }

    });
   public void onActivityResult(int mRequestCode, int mResultCode,
                             Intent mDataIntent) {
    super.onActivityResult(mRequestCode, mResultCode, mDataIntent);

    switch (mRequestCode) {
        case REQUEST_CONNECT_DEVICE:
            if (mResultCode == Activity.RESULT_OK) {
                Bundle mExtra = mDataIntent.getExtras();
                String mDeviceAddress = mExtra.getString("DeviceAddress");
                Log.v(TAG, "Coming incoming address " + mDeviceAddress);
                mBluetoothDevice = mBluetoothAdapter
                        .getRemoteDevice(mDeviceAddress);

                printCommand();
                // pairToDevice(mBluetoothDevice); This method is replaced by
                // progress dialog with thread
            }
            break;

        case REQUEST_ENABLE_BT:
            if (mResultCode == Activity.RESULT_OK) {
                ListPairedDevices();
                Intent connectIntent = new Intent(getContext(),
                        DeviceListActivity.class);
                startActivityForResult(connectIntent, REQUEST_CONNECT_DEVICE);
            } else {
                Toast.makeText(getContext(), "Message", Toast.LENGTH_SHORT).show();
            }
            break;
    }
}

  private void ListPairedDevices() {
    Set<BluetoothDevice> mPairedDevices = mBluetoothAdapter
            .getBondedDevices();
    if (mPairedDevices.size() > 0) {
        for (BluetoothDevice mDevice : mPairedDevices) {
            Log.v(TAG, "PairedDevices: " + mDevice.getName() + "  "
                    + mDevice.getAddress());
        }
    }
  }

   void printCommand(){
    try {
        mBluetoothSocket = mBluetoothDevice
                .createRfcommSocketToServiceRecord(applicationUUID);
        mBluetoothAdapter.cancelDiscovery();
        mBluetoothSocket.connect();
        // mHandler.sendEmptyMessage(0);
    } catch (IOException eConnectException) {
        Log.d(TAG, "CouldNotConnectToSocket", eConnectException);
        closeSocket(mBluetoothSocket);
        return;
    }
    Thread t = new Thread() {
        public void run() {
            try {
                OutputStream os = mBluetoothSocket
                        .getOutputStream();
                String BILL = "";

                BILL = "                   Demo   \n";
                BILL = BILL
                        + "---------------------------------------------\n";
                BILL = BILL + String.format("%1$-5s %2$-14s %3$5s %4$5s 
         %5$8s", "s.No", "Product", "Rate","Qty", "Amount");
          os.write(BILL.getBytes());
                //This is printer specific code you can comment ==== > Start

                // Setting height
                int gs = 29;
                os.write(intToByteArray(gs));
                int h = 104;
                os.write(intToByteArray(h));
                int n = 162;
                os.write(intToByteArray(n));

                // Setting Width
                int gs_width = 29;
                os.write(intToByteArray(gs_width));
                int w = 119;
                os.write(intToByteArray(w));
                int n_width = 2;
                os.write(intToByteArray(n_width));


            } catch (Exception e) {
                Log.e("MainActivity", "Exe ", e);
            }
        }
    };
    t.start();
}
public static byte intToByteArray(int value) {
    byte[] b = ByteBuffer.allocate(4).putInt(value).array();

    for (int k = 0; k < b.length; k++) {
        System.out.println("Selva  [" + k + "] = " + "0x"
                + UnicodeFormatter.byteToHex(b[k]));
    }

    return b[3];
}

DeviceListActivity.Class, используемый для отображения списка сопряженных устройств

 public class DeviceListActivity extends Activity {
protected static final String TAG = "TAG";
private BluetoothAdapter mBluetoothAdapter;
private ArrayAdapter<String> mPairedDevicesArrayAdapter;

@Override
protected void onCreate(Bundle mSavedInstanceState) {
    super.onCreate(mSavedInstanceState);
    requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    setContentView(R.layout.device_list);

    setResult(Activity.RESULT_CANCELED);
    mPairedDevicesArrayAdapter = new ArrayAdapter<String>(this, 
R.layout.device_name);

    ListView mPairedListView = (ListView) findViewById(R.id.paired_devices);
    mPairedListView.setAdapter(mPairedDevicesArrayAdapter);
    mPairedListView.setOnItemClickListener(mDeviceClickListener);

    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    Set<BluetoothDevice> mPairedDevices = mBluetoothAdapter.getBondedDevices();

    if (mPairedDevices.size() > 0) {
        findViewById(R.id.title_paired_devices).setVisibility(View.VISIBLE);
        for (BluetoothDevice mDevice : mPairedDevices) {
            mPairedDevicesArrayAdapter.add(mDevice.getName() + "\n" + mDevice.getAddress());
        }
    } else {
        String mNoDevices = "None Paired";//getResources().getText(R.string.none_paired).toString();
        mPairedDevicesArrayAdapter.add(mNoDevices);
    }
}

@Override
protected void onDestroy() {
    super.onDestroy();
    if (mBluetoothAdapter != null) {
        mBluetoothAdapter.cancelDiscovery();
    }
}

private OnItemClickListener mDeviceClickListener = new OnItemClickListener() {
    public void onItemClick(AdapterView<?> mAdapterView, View mView, int mPosition, long mLong) {

        try {
            mBluetoothAdapter.cancelDiscovery();
            String mDeviceInfo = ((TextView) mView).getText().toString();
            String mDeviceAddress = mDeviceInfo.substring(mDeviceInfo.length() - 17);
            Log.v(TAG, "Device_Address " + mDeviceAddress);

            Bundle mBundle = new Bundle();
            mBundle.putString("DeviceAddress", mDeviceAddress);
            Intent mBackIntent = new Intent();
            mBackIntent.putExtras(mBundle);
            setResult(Activity.RESULT_OK, mBackIntent);
            finish();
        } catch (Exception ex) {

        }
    }
};

}

У меня есть знания начального уровня в Android. Теперь мне нужна ваша поддержка, чтобы завершить это приложение. С нетерпением жду ваших решений РЕДАКТИРОВАТЬ 1: Установите соединение Bluetooth в одном фрагменте и установите параметр печати в другом фрагменте. как я могу это сделать, любой одна ссылка или пример будут более полезными


person Karthi 028    schedule 29.01.2018    source источник
comment
из вашего вопроса я понимаю, что вы хотите подключиться к Bluetooth-принтеру рядом с вами, и он должен запросить список сопряженных устройств. Если это так... У меня есть решение.....   -  person Whats Going On    schedule 29.01.2018
comment
@MLN да вот так   -  person Karthi 028    schedule 29.01.2018


Ответы (1)


ОК, теперь единственное решение - подключить принтер Bluetooth и сохранить его с общими настройками .... а затем использовать его ... чтобы он не спрашивал более 1 раза после сопряжения, просто вам нужно включить принтер и Bluetooth в мобильном телефоне. и Запустите Bluetooth In Admin Mode.

Дайте это разрешение также

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

Ваш код идеален. Просто добавьте Shared Preferences и используйте его всегда .

person Whats Going On    schedule 29.01.2018
comment
У вас есть примеры? - person Karthi 028; 29.01.2018