使用FLAG_ACTIVITY_NEW_TASK启动后关闭Android应用程序

时间:2015-07-27 15:51:07

标签: android android-service

我有两个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元素,但这样做似乎真的很草率。非常感谢任何建议。

1 个答案:

答案 0 :(得分:2)

您是否尝试使用标记Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS?

相关问题