在使用FLAG_ACTIVITY_NEW_TASK启动Android应用程序后关闭该应用程序
我有两个Android应用程序A和B。应用程序A执行一些需要安全的任务,而应用程序B用于更典型的应用程序(UI等)。应用程序A在这里是相关的,主要是因为它有一个启动器活动,而应用程序B没有。对于用户来说,它应该看起来只有一个应用在运行 从应用程序a中的服务,我有时会向应用程序B中的服务发送请求以执行某些操作,如下所示:在使用FLAG_ACTIVITY_NEW_TASK启动Android应用程序后关闭该应用程序,android,android-service,Android,Android Service,我有两个Android应用程序A和B。应用程序A执行一些需要安全的任务,而应用程序B用于更典型的应用程序(UI等)。应用程序A在这里是相关的,主要是因为它有一个启动器活动,而应用程序B没有。对于用户来说,它应该看起来只有一个应用在运行 从应用程序a中的服务,我有时会向应用程序B中的服务发送请求以执行某些操作,如下所示: public class AppAService extends Service { //... more code ... public void makeRequ
public class AppAService extends Service {
//... more code ...
public void makeRequest(Intent request){
request.setComponent(new ComponentName("com.mydomain.B", "com.mydomain.B.AppBService"));
startService(request);
}
}
public class AppBService extends Service {
//... more code ...
public void askUser(){
Intent intent = new Intent(AppBService.this, UIActivity.class);
//Need a new task since we are starting from a service
intent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}
}
当我在应用程序B的服务中收到这些请求时,有时我想从用户那里获得一些输入,或者显示进度(例如,如果我要下载一个文件,我可能想确保用户同意),因此我可能会启动如下UI活动:
public class AppAService extends Service {
//... more code ...
public void makeRequest(Intent request){
request.setComponent(new ComponentName("com.mydomain.B", "com.mydomain.B.AppBService"));
startService(request);
}
}
public class AppBService extends Service {
//... more code ...
public void askUser(){
Intent intent = new Intent(AppBService.this, UIActivity.class);
//Need a new task since we are starting from a service
intent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}
}
我的问题是,我不希望用户能够通过打开最近的任务导航回UIActivity;实际上,这只是一件暂时的事情,让他们知道一些重要的事情正在发生。在UIActivity类完成获取输入后,我尝试在它中使用System.exit(0)
,但这似乎不起作用(即使这样做了,我也会犹豫是否使用它)。以下是UIActivity中的相关函数,在用户提供相关输入后,我广播响应:
public void sendResponse(){
Intent response = new Intent();
response.setAction("com.mydomain.action.RESPONSE");
sendBroadcast(response);
finish();
//System.exit(0); //using this breaks things AND the user can still open the activity from recent tasks
}
我还在UIActivity的清单文件中将noHistory
选项设置为true,但这也不起作用。我已经做了一件可以正常工作的事情,那就是在所有其他事情都完成后再次启动UIActivity,我检测并调用System.exit(0)
。如果有必要,我可以求助于此,但似乎必须有更好的方法
基本上,我只想从我的服务中弹出一些简单的UI,然后阻止用户在提供必要的输入后导航回该活动。我考虑过从服务中的异步任务向窗口管理器添加UI元素,但这样做似乎太草率了。非常感谢您的建议。您是否尝试过使用flag。flag\u ACTIVITY\u EXCLUDE\u FROM\u RECENTS 哇,现在我觉得自己很愚蠢。这很有效,非常感谢!