Открытие Activity через сервис, даже если приложение закрыто - PullRequest
0 голосов
/ 18 октября 2018

Я работаю над приложением, в котором мне нужно показать активность пользователю, даже если приложение закрыто, для этого я использую Service, и из этого сервиса я открываю свой Activity с именем OverlayActivity.java.

Я получаю OverlayActivity, когда приложение открыто или находится в диспетчере задач, но как только я удаляю приложение из диспетчера задач, OverlayActivity не отображается.Я не уверен, на каком этапе он не работает, т. Е. Не работает ли служба или есть проблема с отображением активности.

Я пробовал много решений здесь, на StackOverflow, но не смог получитьвсе, что работает в моем случае.

Это код класса обслуживания:

public class OverlayService extends Service {

    private static final String TAG = OverlayService.class.getSimpleName();

    @Override
    public IBinder onBind(Intent intent) {
    return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        registerOverlayReceiver();
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        unregisterOverlayReceiver();
        super.onDestroy();
    }

    private void registerOverlayReceiver() {
        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_SCREEN_ON);
        filter.addAction(ACTION_DEBUG);
        registerReceiver(overlayReceiver, filter);
        System.out.println("Service aa started");
    }

    private void unregisterOverlayReceiver() {
        unregisterReceiver(overlayReceiver);
    }

    private static final String ACTION_DEBUG = "kunal.lockoverlay.action.DEBUG";

    private BroadcastReceiver overlayReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            Log.d(TAG, "[onReceive]" + action);
            if (action.equals(Intent.ACTION_SCREEN_ON)) {
                // ACTON_SCREEN_ON
                showOverlayActivity(context);
            } else if (action.equals(ACTION_DEBUG)) {
                showOverlayActivity(context);
            }
        }
    };

    private void showOverlayActivity(Context context) {
        Intent intent = new Intent(context, OverlayActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    }
}

Я даже не уверен, возможно ли то, что я пытаюсь сделать, или нет.Если это вообще возможно, где я делаю неправильно.

Ответы [ 3 ]

0 голосов
/ 18 октября 2018

enter image description here

Полагаю, это ответ на ваш вопрос.Вы просто не можете этого сделать, но вы можете показать пользователю (при условии, что служба все еще работает) пользователю, что может привести к вашей требуемой активности.Чтобы сохранить ваш сервис навсегда, см. этот пост

0 голосов
/ 29 октября 2018

Я решил эту проблему, предоставив разрешение на автозапуск, и без разрешения на автозапуск моя служба не смогла запуститься после закрытия из диспетчера задач.Теперь я могу успешно запустить службу даже после закрытия приложения из диспетчера задач.

0 голосов
/ 18 октября 2018

Создайте класс обслуживания и запустите свой сервис внутри onDestroy ()

@Override
public void onDestroy() {
   //start service 
    super.onDestroy();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...