即使关闭了应用程序,也可以通过服务打开活动

时间:2018-10-18 07:05:58

标签: android service

我正在开发一个应用程序,即使关闭了该应用程序,我也需要向用户显示活动,为此我正在使用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 :(得分:0)

  

创建服务类并在onDestroy()中启动服务

@Override
public void onDestroy() {
   //start service 
    super.onDestroy();
}

答案 1 :(得分:0)

enter image description here

我想这就是您问题的答案。您只是不能执行此操作,但是您可以做的是向用户显示一条通知(假设该服务仍在运行),这可能导致您需要进行的活动。要使您的服务永远存活,请参见this post

答案 2 :(得分:0)

我通过提供自动启动权限解决了此问题,没有自动启动权限,一旦从任务管理器中关闭服务,我就无法启动。现在,即使从任务管理器中关闭了该应用程序,我也能够成功启动该服务。