Сделайте соединение Bluetooth живым для нескольких действий

В моем приложении я хочу отправить значение из нескольких действий в подключенный поток, я не знаю, как решить эту проблему, пожалуйста, помогите мне Пример: я хочу отправить String string ="#FFFFFF000*"; из First-Activity в класс обслуживания, String string= "#000000000*"; от Второй активности до класса обслуживания

 public class BluetoothDataService1 extends Service {
        final int handlerState = 0;
        Handler bluetoothIn;
        private BluetoothAdapter btAdapter = null;

        private ConnectingThread mConnectingThread;
        private ConnectedThread mConnectedThread;

        private boolean stopThread;

        private static final UUID BTMODULEUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

       // private static String MAC_ADDRESS="98:D3:31:30:A5:00" ;
        private static String MAC_ADDRESS="98:D3:32:20:42:54" ;

        private StringBuilder recDataString = new StringBuilder();
        private final IBinder binder = new LocalBinder();


        @Override
        public void onCreate() {
            super.onCreate();

            stopThread = false;

        }


        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            super.onStartCommand(intent, flags, startId);
            bluetoothIn = new Handler()
            {
                public void handleMessage(android.os.Message msg) {

                    if (msg.what == handlerState) {
                        String readMessage = (String) msg.obj;
                        recDataString.append(readMessage);


                    }
                    recDataString.delete(0, recDataString.length());
                }


            };

            btAdapter = BluetoothAdapter.getDefaultAdapter();
            checkBTState();
            return START_STICKY;
            //return super.onStartCommand(intent, flags, startId);
        }



        @Override
        public void onDestroy() {
            super.onDestroy();
            bluetoothIn.removeCallbacksAndMessages(null);
            stopThread = true;
            if (mConnectedThread != null ) {
                mConnectedThread.closeStreams();
            }
            if (mConnectingThread != null) {
                mConnectingThread.closeSocket();
            }

        }


        @Override
        public IBinder onBind(Intent intent)

        {
            return binder;
        }


        //Checks  Bluetooth is available and turned on /off
        private void checkBTState() {
            if (btAdapter == null) {

                stopSelf();
            } else {
                if (btAdapter.isEnabled()) {

                    try {
                        BluetoothDevice device = btAdapter.getRemoteDevice(MAC_ADDRESS);
                        mConnectingThread = new ConnectingThread(device);
                        mConnectingThread.start();
                    }   catch (IllegalArgumentException e) {

                        stopSelf();
                    }
                }   else {

                    stopSelf();
                }
            }
        }

    //    public void senddata() {
    //
    //    }

        // New Class for Connecting Thread
           public class ConnectingThread extends Thread {
            private final BluetoothSocket mmSocket;
            private final BluetoothDevice mmDevice;
            public ConnectingThread(BluetoothDevice device) {

                mmDevice = device;
                BluetoothSocket temp = null;

                try {

                    temp = mmDevice.createRfcommSocketToServiceRecord(BTMODULEUUID);

                }   catch (IOException e) {

                    stopSelf();
                }
                mmSocket = temp;
            }

            @Override
            public void run() {
                super.run();
                btAdapter.cancelDiscovery();
                try {
                    mmSocket.connect();
                    mConnectedThread = new ConnectedThread(mmSocket);
                    mConnectedThread.start();
                    mConnectedThread.write("x");
                } catch (IOException e) {
                    try {

                        mmSocket.close();
                        stopSelf();
                    } catch (IOException e2) {

                        stopSelf();

                    }
                } catch (IllegalStateException e) {

                    stopSelf();
                }
            }
            public void closeSocket() {
                try {

                    mmSocket.close();
                } catch (IOException e2) {

                    stopSelf();
                }
            }
        }

        // New Class for Connected Thread
        class ConnectedThread extends Thread {
            private final InputStream mmInStream;
            private final OutputStream mmOutStream;

            //creation of the connect thread
            public ConnectedThread(BluetoothSocket socket) {

                InputStream tmpIn = null;
                OutputStream tmpOut = null;

                try {
                    //Create I/O streams for connection
                    tmpIn = socket.getInputStream();
                    tmpOut = socket.getOutputStream();
                }   catch (IOException e) {

                    stopSelf();
                }

                mmInStream = tmpIn;
                mmOutStream = tmpOut;
            }

            public void run() {

                byte[] buffer = new byte[256];
                int bytes;

                // Keep looping to listen for received messages
                while (true && !stopThread) {
                    try {
                        bytes = mmInStream.read(buffer);
                        String readMessage = new String(buffer, 0, bytes);
                        //Send the obtained bytes to the UI Activity via handler
                        bluetoothIn.obtainMessage(handlerState, bytes, -1, readMessage).sendToTarget();
                    }   catch (IOException e) {

                        stopSelf();
                        break;
                    }
                }
            }

            //write method
            public void write(String input) {
                byte[] msgBuffer = input.getBytes();
                try {
                    mmOutStream.write(msgBuffer);
                }   catch (IOException e) {
                    stopSelf();
                }
            }

            public void closeStreams() {
                try {
                    mmInStream.close();
                    mmOutStream.close();
                }   catch (IOException e2) {
                    stopSelf();
                }
            }
        }

    //    private class LocalBinder implements IBinder {
    //    }
    public class LocalBinder extends Binder {
              BluetoothDataService1 getService() {
                 return BluetoothDataService1.this;
        }
    }

Это моя активность

public class SendActivity extends Activity implements View.OnClickListener {
    Button on;
    BluetoothDataService1 bluetoothDataService1;
    public boolean isBound = false;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_send);
        on= (Button) findViewById(R.id.btnon);
        on.setOnClickListener(this);
    }

    @Override
    public  void onStart() {
        super.onStart();
          Intent intent = new Intent(this, BluetoothDataService1.class);
          bindService(intent, connection, Context.BIND_AUTO_CREATE);
    }

    @Override
    public void onClick(View v) {
        if (isBound) {

//                  Intent intent=new Intent (SendActivity.this,BluetoothDataService1.class);
//                  intent.putExtra("ON","#ffffff00" );
//                  startService(intent);
        }
    }
    private ServiceConnection connection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName className, IBinder service) {
            BluetoothDataService1.LocalBinder binder = (BluetoothDataService1.LocalBinder) service;
            bluetoothDataService1 = binder.getService();
            isBound = true;

        }
        @Override
             public void onServiceDisconnected(ComponentName arg0) {
             isBound = false;
        }
    };
    @Override
      public void onStop() {
        super.onStop();
          if (isBound) {
              unbindService(connection);
              isBound = false;
        }
    }

1 ответ

  1. что бы я не понял из вашего вопроса, я даю вам решение 2. вам нужно сделать переменную статической, чтобы вы могли напрямую обращаться к этой переменной из другого действия 3. как у вас есть 3 действия A B C 4. теперь вы хотите получить переменную из A и B в C
    1. тогда вы можете сделать переменную статической в ​​проверке A и B ниже.
    2. в публичной статике String string="#FFFFFF000" так же, как в B
    3. и вы можете перейти в C
    4. String string = A.string;
  2. или вы можете создать статический метод в действии A и B и вызвать этот метод из действия C. це
  3. наподобие `public static void send(){ static veriableName="FFFFFF000" // отправляю код сюда что угодно

               }`
    
  4. и вызывая этот метод из C, вы можете сделать A.send();
Другие вопросы по тегам