我正在创建一个Android自助服务终端应用程序,一个启动器应用程序。该应用程序显示允许用户使用的应用程序。我想阻止用户打开不需要的应用程序(如最近的应用程序,设置等)。所以我构建了一个服务(KioskService.class),它检查活动活动是否在允许的应用程序列表中。这是通过一个线程完成的(所以即使打开了另一个应用程序,它也会检查)
此时打开一个不允许的应用程序,我将返回自助服务终端应用程序。我想要的是重新打开之前的活动。
所以举个例子。当我打开日历应用程序(这是一个允许的应用程序)时,然后我从通知栏打开设置,应用程序需要返回到de Calender活动。
提前致谢,
T
答案 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 - 将禁用任何包。