5

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

解决时显示默认androidSettings应用程序的包名称是com.android.settings。现在我有一些疑问

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

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

4

5 回答 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;
    }

于 2017-03-28T03:16:41.960 回答
5

为此,我尝试获取当前正在运行的应用程序并检查它们的包名是否被允许。如果不允许,则显示一个新活动。

幸运的是,对于受您的应用影响的用户,这将是不可靠的。

设置应用程序是否在所有 android 版本中都有包名称 com.android.settings?

不必要。更重要的是,任何给定的固件都可以有任意数量的修改设置的应用程序,由固件作者提供。某些设置即使不是固件的一部分也可以修改,尤其是在有根设备上。

如果不是,它们是什么?

欢迎您列出所有设备制造商和 ROM 模组作者并问他们这个问题。

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

设备、ROM 模组中包含任意数量的“任务管理器”应用程序,并可在 Play 商店和其他分发点上使用。欢迎您列出所有这些,并向他们的作者提出这个问题。

于 2013-04-10T11:52:00.200 回答
0

使用 adb 进入设备,然后调用:

pm 列出包

这将为您提供一个包装清单。从那里你会看到:com.android.settings

于 2015-01-29T04:49:04.137 回答
0
    final PackageManager pm = getPackageManager();
    List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);

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

上面的代码应该可以帮助你

于 2015-08-17T11:10:37.570 回答
0

目前还不完全清楚情况是什么。我想这类似于向公众炫耀设备而不是让他们为其他人改造设备。

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

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

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

于 2019-10-22T08:08:54.930 回答