我有两个Android应用程序A和B.应用程序A执行一些需要安全的任务,而应用程序B用于更典型的应用程序(UI等)。 App A在这里是相关的,主要是因为它有一个启动器Activity,而app B没有。对于用户来说,它应该看起来只有一个应用程序正在运行。
从应用A的服务中,我有时会向应用B中的服务发送请求以执行某些操作,如下所示:
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);
}
}
当我在应用B的服务中收到这些请求时,我有时想从用户那里获得一些输入,或者显示进度(例如,如果我要下载文件,我可能想要制作确保用户对此感到满意,所以我可能会启动这样的UI活动:
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,但这也不起作用。我做过的一件事就是运行正常,就是在其他所有事情都完成了我检测到并调用System.exit(0)
的Intent动作之后再次启动UIActivity。如果必须,我可以诉诸于此,但似乎有是更好的方法。
基本上我只想要一种方法从我的服务中弹出一些简单的UI,然后阻止用户在给出必要的输入后导航回该Activity。我考虑过从服务中的AsyncTask向窗口管理器添加UI元素,但这样做似乎真的很草率。非常感谢任何建议。
答案 0 :(得分:2)
您是否尝试使用标记Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS?