Android 通过服务打开活动,即使应用程序已关闭

Android 通过服务打开活动,即使应用程序已关闭,android,service,Android,Service,我正在开发一个应用程序,在该应用程序中,即使应用程序关闭,我也需要向用户显示一个活动,因为我使用的是服务,并且从该服务中,我打开了名为OverlayActivity.java的活动 当应用程序处于打开状态或存在于task manager中时,我会获得OverlayActivity,但当我从task manager中删除应用程序时,OverlayActivity不会显示。我不确定哪一步不起作用,即服务是否不起作用,或者显示活动时是否存在问题 我在StackOverflow上尝试了很多解决方案,但在

我正在开发一个应用程序,在该应用程序中,即使应用程序关闭,我也需要向用户显示一个活动,因为我使用的是
服务
,并且从该服务中,我打开了名为OverlayActivity.java的
活动

当应用程序处于打开状态或存在于task manager中时,我会获得OverlayActivity,但当我从task manager中删除应用程序时,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);
    }
}
我甚至不确定我想做的事情是否可能。如果有可能的话,我做错了

创建一个服务类并在onDestroy()中启动您的服务


我想这就是你问题的答案。您不能这样做,但您可以做的是向用户显示一个通知(假定服务仍在运行),该通知可能导致您所需的活动。为了让您的服务永远有效,请参见

我通过提供Autostart权限解决了这个问题,没有Autostart权限,我的服务在从任务管理器关闭后无法启动。现在,即使在应用程序从任务管理器关闭后,我也能够成功启动该服务。

您的广播是否有任何日志?请参阅此()帖子。@SyedHamzaHassan,不是Bolendra Singh,您尝试过此功能,但不起作用
@Override
public void onDestroy() {
   //start service 
    super.onDestroy();
}