блютуз активность в сервис - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь написать службу Bluetooth, которая работает в фоновом режиме и может связываться с любой деятельностью в приложении на основе кода от пользователя Kapil Vats. [ Как переместить активность Bluetooth в службу Сервис работает, но я не получаю сообщений от него.

У меня есть Handler в классе MyApplication и Handler.Callback в AbstractActivity.

открытый класс MyApplication расширяет приложение {

 Handler.Callback realCallback = null;
 @SuppressLint("HandlerLeak")
 Handler handler = new Handler() {
     public void handleMessage(Message msg) {
         if (realCallback != null) {
             realCallback.handleMessage(msg);
         }
     };
 };

 public Handler getHandler() {
     return handler;
 }

 public void setCallBack(Handler.Callback callback) {
     this.realCallback = callback;
 }

}

открытый абстрактный класс AbstractActivity расширяет AppCompatActivity {

public static final int MESSAGE_STATE_CHANGE = 1 ;
public static final int MESSAGE_WRITE = 2;
public static final int MESSAGE_READ = 3 ;
public static final int MESSAGE_DEVICE_NAME = 4;
public static final int MESSAGE_TOAST = 5 ;
public static final String TOAST = "toast";
public static final String DEVICE_NAME = "device_name" ;

private static final String TAG = "BTSERVICE";

abstract void  printReadMessage(String readMessage);
abstract void  printWriteMessage(String readMessage);

Handler.Callback callback = new Handler.Callback() {
    @Override
    public boolean handleMessage(Message msg) {

        switch (msg.what) {
            case MESSAGE_STATE_CHANGE:
                switch (msg.arg1) {
                    case 1:
                        Toast.makeText(getApplicationContext(), getResources().
                                        getText(R.string.connecting),
                                Toast.LENGTH_SHORT).show();
                        break;
                }
                break;

            case MESSAGE_WRITE:
                byte[] writeBuf = (byte[]) msg.obj;
                String writeMessage = new String(writeBuf);
                printWriteMessage(writeMessage);

                Log.d(TAG, writeMessage);
                break;

            case MESSAGE_READ:
                byte[] readBuf = (byte[]) msg.obj;
                String readMessage = new String(readBuf, 0, msg.arg1);
                printReadMessage(readMessage);

                Log.d(TAG, readMessage);
                break;

            case MESSAGE_DEVICE_NAME:
                // save the connected device's name
                String mConnectedDeviceName = msg.getData().getString(DEVICE_NAME);
                Toast.makeText(getApplicationContext(), getResources().
                                getText(R.string.con_to) + mConnectedDeviceName,
                        Toast.LENGTH_SHORT).show();
                break;

            case MESSAGE_TOAST:
                Toast.makeText(getApplicationContext(), msg.getData().getString(TOAST),
                        Toast.LENGTH_SHORT).show();
                break;
        }
        return true;
    }
};

Я вижу, что метод setCallBack (обратный вызов Handler.Callback) и обратный вызов в AbstractActivity никогда не использовались. Я пытаюсь в AbstractActivity установить так: ((MyApplication) getApplication) .setCallBack (обратный вызов), но это неправильно. Пожалуйста, объясните, как я могу реализовать метод setCallback?

...