Android:如何关闭从我的应用程序打开的应用程序,当所有发送到背景

问题描述:

这是我的问题。我正在开发从服务器加载一些文档的应用程序。我通过Intent.ACTION_VIEW在另一个应用程序中打开文档。这一切都工作得很好。问题在于整个应用程序受到引脚保护,因此我必须捕获事件,例如“发送到后台”或“屏幕锁定”,以便随后调出引脚屏幕,而当另一个应用程序在我的上方打开时,这不起作用。因此,如果用户打开文档,然后按主页按钮,从菜单上单击我的启动图标,然后他再次获得外部应用程序与打开的文档和后退按钮再次访问我的应用程序。这是需要解决的安全问题。 下面是一些代码片段:Android:如何关闭从我的应用程序打开的应用程序,当所有发送到背景


打开文件:

Intent intent = new Intent(); 
intent.setAction(Intent.ACTION_VIEW); 

Uri uri = Uri.fromFile(downloadedFile); 
String mimeType = document.getMimeType(); 
intent.setDataAndType(uri, mimeType); 
startActivityForResult(intent, 1); 

捕获发送到后台:

 ActivityManager am = (ActivityManager) context 
      .getSystemService(Context.ACTIVITY_SERVICE); 
    List<RunningTaskInfo> tasks = am.getRunningTasks(1); 
    if (!tasks.isEmpty()) { 
     ComponentName topActivity = tasks.get(0).topActivity; 
     if (!topActivity.getPackageName().equals(context.getPackageName())) { 
      IN_BACKGROUND = true; 
      Log.i(PinUtil.class.getSimpleName(), "App sent to background "); 
     } else { 
      IN_BACKGROUND = false; 
     } 
    } 

我的问题是:是否有可能检测是否我的应用程序发送当另一个应用程序打开时的背景?按下我的启动器图标时如何不打开另一个应用程序。

感谢您的回复。 问候 Lubos

为了解决这个问题:

所以,如果用户打开文档,然后按home键,点击我的推出从菜单 图标,然后他会用打开的文档 又一次外部应用程序用后退按钮再次访问我的应用程序。这是 需要修复的安全问题。下面是一些代码片段:

你需要确保的是,当你启动一个外部应用程序供用户查看文档时,外部应用程序不会运行在同一个任务,你的应用程序。它需要运行一个新的,单独的任务。你可以这样做是这样的:

Intent intent = new Intent(); 
intent.setAction(Intent.ACTION_VIEW); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // Ensure app runs in separate task 
Uri uri = Uri.fromFile(downloadedFile); 
String mimeType = document.getMimeType(); 
intent.setDataAndType(uri, mimeType); 
startActivity(intent); // Can't use startActivityForResult() here 

但是,您不能使用startActivityForResult()当您启动外部浏览器,因为在其它任务中运行的活动可以导致不能返还给您。但是,大多数外部应用程序无论如何都不会返回结果ACTION_VIEW,所以它可能不是问题。

然后你问这个:

我的问题是:是否有可能,如果另一个应用程序打开时,我的应用程序发送到 背景来检测?当我按下启动器图标时如何不打开另一个应用程序 。

*应该有一些答案,可以帮助您确定您的应用程序是否在后台(它确实不是那么容易确定这一点)。

我上面的解释应该回答你的第二个问题。如果您在任务中未启动其他应用程序,则只有您的应用程序会在按下启动器图标时启动。