Android自助服务终端应用程序 - 关闭不需要的应用程序

时间:2015-06-17 09:53:34

标签: java android multithreading android-intent android-activity

我正在创建一个Android自助服务终端应用程序,一个启动器应用程序。该应用程序显示允许用户使用的应用程序。我想阻止用户打开不需要的应用程序(如最近的应用程序,设置等)。所以我构建了一个服务(KioskService.class),它检查活动活动是否在允许的应用程序列表中。这是通过一个线程完成的(所以即使打开了另一个应用程序,它也会检查)

此时打开一个不允许的应用程序,我将返回自助服务终端应用程序。我想要的是重新打开之前的活动。

所以举个例子。当我打开日历应用程序(这是一个允许的应用程序)时,然后我从通知栏打开设置,应用程序需要返回到de Calender活动。

提前致谢,

T

3 个答案:

答案 0 :(得分:2)

首先,您需要root权限,然后尝试以下步骤:

1)运行守护程序服务以持续监视用户当前使用的应用程序。这可以通过获取前台应用程序的包名来实现。 要获取前台应用程序的程序包名称,请使用以下代码:

ActivityManager mActivityManager =(ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE);

if(Build.VERSION.SDK_INT > 20){
String mPackageName = mActivityManager.getRunningAppProcesses().get(0).processName;
}
else{
  String mpackageName = mActivityManager.getRunningTasks(1).get(0).topActivity.getPackageName();
}

2)将包与您的白名单应用进行比较。如果当前应用程序不在您的列表中,请使用以下代码将其终止:

Process process = Runtime.getRuntime().exec("adb shell am force-stop packagename");
process.waitFor();
3)为了防止用户使用通知栏或导航按钮导航,你可以杀死系统UI进程并使你自己实现类似于浮动按钮的导航按钮。

答案 1 :(得分:0)

关闭其他应用程序可能会给您带来安全问题。

Android docs

  

您的应用程序在安全的沙箱环境中运行,因此系统上的其他进程无法访问您的代码或私有数据。

Ergo,试图从您自己的服务中关闭其他应用程序可能不是一个可行的选择。

如果启动了另一个应用程序,您可以将自己的应用程序带回前台吗?

修改:

This看起来像是一个关于如何构建自助服务终端应用的有趣教程。

这种方法也很有趣,因为你的应用程序在启动时启动,所以没有机会让用户启动另一个应用程序,

答案 2 :(得分:0)

@Zain给出的是一个很棒的教程。我已经完成了它。

如果要禁用其他应用程序,可以使用adb shell命令执行此操作。

adb shell pm list packages - 将列出所有包

adb shell pm hide com.the.packagename - 将禁用任何包。