我正在开发一个应用程序,即使关闭了该应用程序,我也需要向用户显示活动,为此我正在使用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);
}
}
我什至不确定我尝试做的事情是否可行。如果有可能我做错了。
答案 0 :(得分:0)
创建服务类并在onDestroy()中启动服务
@Override
public void onDestroy() {
//start service
super.onDestroy();
}
答案 1 :(得分:0)
我想这就是您问题的答案。您只是不能执行此操作,但是您可以做的是向用户显示一条通知(假设该服务仍在运行),这可能导致您需要进行的活动。要使您的服务永远存活,请参见this post
答案 2 :(得分:0)
我通过提供自动启动权限解决了此问题,没有自动启动权限,一旦从任务管理器中关闭服务,我就无法启动。现在,即使从任务管理器中关闭了该应用程序,我也能够成功启动该服务。