【问题标题】:Android kiosk application - Shutting down unwanted applicationsAndroid kiosk 应用程序 - 关闭不需要的应用程序
【发布时间】:2015-06-17 09:53:34
【问题描述】:

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

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

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

提前致谢,

T

【问题讨论】:

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


【解决方案1】:

首先你需要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 进程并让自己的导航按钮实现类似于浮动按钮。

【讨论】:

    【解决方案2】:

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

    Androiddocs 状态

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

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

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

    编辑:

    This 看起来像是一个关于如何构建信息亭应用的有趣教程。

    这种方法也很有趣,因为您的应用程序在启动时启动,因此不会给用户启动另一个应用程序的机会,

    【讨论】:

    • 我知道 Android 文档中的声明。该应用不会通过 Play 商店发布。
    • 不通过应用商店发布也没关系。您是 Android 操作系统上的应用程序不能/不应访问其他应用程序活动、数据,而不是通过 Intents 或公共 ContentProvider 等。
    • 感谢您的回答!现在我知道了这个问题!
    • 请参阅上面的编辑,了解可能的解决方案。祝你好运!
    【解决方案3】:

    @Zain 提供的是一个很棒的教程。我已经经历过了。

    如果你想禁用其他应用程序,你可以使用 adb shell 命令来实现。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      • 2013-08-12
      • 2015-10-15
      • 2023-03-19
      • 2012-01-09
      • 1970-01-01
      相关资源
      最近更新 更多