如何找到默认设置应用程序的包名

5

我希望在我的应用程序中防止启动任务管理器和设置应用程序。 为此,我尝试获取当前正在运行的应用程序,并检查它们的包名称是否允许。如果不允许,则显示一个新的活动。

当我研究时发现默认Android Settings应用程序的软件包名称是com.android.settings。现在我有一些疑问:

  1. 所有Android版本中,设置应用程序的软件包名称是否都是com.android.settings?如果不是,它们是什么?

  2. 如何找到任务管理器的包名称?


3
任何情况下都不建议阻止设置和任务管理器。 - Manoj Kumar
1
我并不是说你不能这样做,但你不应该这样做。 - Manoj Kumar
不建议在任何情况下阻止设置。为什么?因为我正在使用条码扫描设备上的Android系统,这些设备经过许多人手。用户没有理由更改任何设置。 - Thomas
5个回答

10
尝试这个

private String querySettingPkgName() {
        Intent intent = new Intent(android.provider.Settings.ACTION_SETTINGS);
        List<ResolveInfo> resolveInfos = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
        if (resolveInfos == null || resolveInfos.size() == 0) {
            return "";
        }

        return resolveInfos.get(0).activityInfo.packageName;
    }


5
为此,我试图获取当前正在运行的应用程序并检查其包名称是否被允许。如果不允许,则显示一个新的活动。
幸运的是,对于受到您应用影响的用户而言,这将是不可靠的。
在所有Android版本中,设置应用程序的包名称是com.android.settings吗?
不一定。更重要的是,任何给定的固件都可以有任意数量的修改设置的应用程序,由固件制造商提供。某些设置甚至可以在未成为固件组成部分的情况下进行修改,特别是在Root设备上。
如果不是这样,它们是什么?
欢迎您列出所有设备制造商和ROM mod作者,并向他们询问这个问题。
如何找到任务管理器的包名称?
设备、ROM mod中包含了无数的“任务管理器”应用程序,在Play Store和其他分发点也可以找到。您可以列出它们并询问它们的作者这个问题。

请问您能否建议我们在这种情况下应该遵循什么正确的方式?如问题所述,该设备将由第三方使用,我们不希望他们更改设备的任何设置。 - Renjith K N
@RenjithKN:如果这是你自己的设备,请设置一个次要受限帐户,该帐户无法访问“设置”应用程序。这是主设备帐户可以执行的操作,不需要进行任何编程。 - CommonsWare
@CommnsWare 感谢您的回复,不是针对我的设备,情况有所不同,这是为商店中的演示设备而设计的。在演示设备上,我们安装了我们的KIOSK应用程序,设备将公开访问且无人看管。我们需要限制客户设置设备的屏幕锁定和卸载KIOSK应用程序。是否可能从KIOSK应用程序本身进行所有这些限制,而不需要任何EMM控制台和托管Play商店?(我对EMM不太了解,刚开始阅读相关内容) - Renjith K N
@RenjithKN:自 Android 5.0 左右,Android 本身就支持了一个 kiosk 模式。我没有太关注细节。 - CommonsWare

0

情境不是很清楚。 我猜想这是向公众展示设备,但不希望他们损坏设备。

也许更好的方法是使用白名单而不是黑名单。这意味着商店应该说明哪些应用程序可以在设备上测试,如果是其他应用程序,则可以开始您的活动。

但这又需要维护:流行应用程序的包名称也可能会更改。最好提供一种通过在线服务更新应用程序设置的方法,以便您可以更改所需的软件包,而无需物理访问设备并且无需下载和安装完整的应用程序。

如果您只需要一个经过多人手的设备,并且不应被篡改,我建议使用修改后的设备。我只知道Sonim:他们提供一个库(需要在您的清单中提供Sonim提供的哈希密钥才能使用)。使用它,您可以禁止更改许多设置,而不会阻止访问整个设置应用程序。


0

通过adb将shell输入到设备中,并调用:

pm list packages

这将为您提供一个包列表。从那里,您应该能看到: com.android.settings


0
    final PackageManager pm = getPackageManager();
    List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);

    for (ApplicationInfo packageInfo : packages) {
        Log.d("Packages", "" + packageInfo.packageName);
    }

以上代码应该能帮到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接