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

时间:2013-02-14 09:20:24

标签: java android android-intent

这是我的问题。我正在开发从服务器加载一些文档的应用程序。我通过Intent.ACTION_VIEW在另一个应用程序中打开文档。这一切都很好。问题是整个应用程序都受到针脚保护,因此我必须捕获事件,例如“发送到后台”或“屏幕锁定”,以便随后显示针脚屏幕,当我的上方打开另一个应用程序时,这不起作用。因此,如果用户打开文档然后按主页按钮,从菜单中单击我的启动图标,然后他再次获得带有打开文档的外部应用程序,并使用后退按钮再次访问我的应用程序这是需要修复的安全问题。 以下是一些代码段:


打开文件:

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

1 个答案:

答案 0 :(得分:1)

为了解决这个问题:

  

因此,如果用户打开文档,然后按主页按钮,单击我的启动   菜单中的图标然后他再次获取打开文档的外部应用程序   并使用后退按钮再次访问我的应用程序。这是安全问题   需要修复。以下是一些代码段:

当您为用户启动外部应用程序以查看文档时,您需要确保外部应用程序在与应用程序相同的任务中运行。它需要在一个新的独立任务中运行。你可以这样做:

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启动时都不会返回结果,所以它可能不是问题。

然后你问了这个:

  

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

StackOverflow上应该有一些答案可以帮助您确定您的应用程序是否在后台(实际上并不容易确定)。

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