Как изменить активность из обработчика? - PullRequest
0 голосов
/ 15 апреля 2019

Мне нужен сервис для связи по Bluetooth.Иногда дела идут плохо.Я хочу показать это в Деятельности.Но как?Трансляции?sendbroadcast неизвестно в handler

Я посмотрел на: Получение обработчика из потока из сервиса в действие Но я не понимаю.

Вот мои занятия:

public class TestService extends Service {

    public ExampleLooper looperThread = new ExampleLooper();

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        String input = intent.getStringExtra("Nachricht");

        Intent notificationIntent = new Intent(this, MainActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this,
                0, notificationIntent, 0);

        Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID)
                .setContentTitle("Rufknopf")            // TODO in @string/... packen
                .setContentText(input)
                .setSmallIcon(R.drawable.ic_android)
                .setContentIntent(pendingIntent)
                .build();

        startForeground(1, notification);

        ExampleHandler handler = new ExampleHandler();

        Message msg = Message.obtain();
        msg.what = intent.getIntExtra("LooperMessage",-1);

        looperThread.handler.sendMessage(msg);

      //  return super.onStartCommand(intent, flags, startId);
        return START_NOT_STICKY;
    }

    @Override
    public void onCreate(){
        super.onCreate();
        Log.d(TAG, "onCreate: Service das erste mal gestartet.");
        looperThread.start();
    }

    @Override
    public void onDestroy(){
        Log.d(TAG, "onDestroy: ");
        looperThread.looper.quit();


        super.onDestroy();
    }
}

public class ExampleLooper extends Thread {

    private static final String TAG = "ExampleLooperThread";

    public Looper looper;
    public Handler handler;

    @Override
    public void run() {
        Looper.prepare();

        looper = Looper.myLooper();

        handler = new ExampleHandler();

        Looper.loop();


        Log.d(TAG, "End of run()");
    }
}
public class ExampleHandler extends Handler {

    public static final int FALL1 = 10;
    public static final int FALL2 = 20;

    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);

        switch(msg.what){

            case (FALL1):
                Log.d(TAG, "handleMessage: Fall 1");
                SystemClock.sleep(3000);               
                break;
            case (FALL2):
                Log.d(TAG, "handleMessage: Fall 2");
                break;
            default:
                Log.e(TAG, "handleMessage: default kein passenden Wert gefunden"); //TODO in MainActivity Fehler anzeigen lassen

                Log.e(TAG, "handleMessage: Error" );
                break;
        }
    }
}

1 Ответ

0 голосов
/ 15 апреля 2019

У вас есть два экземпляра ExampleHandler, один в вашем основном потоке, а другой в вашем ExampleLooper.Попробуйте вместо этого.

public class TestService extends Service {

public ExampleHandler mHandler;

@Override
    public int onStartCommand(Intent intent, int flags, int startId) {

   ...    

   new Thread() {
            @Override
            public void run() {
                Looper.prepare();
                mHandler = new ExampleHandler();
                Looper.loop();
            }
        }.start();
   }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...