我希望在我的应用程序中防止启动任务管理器和设置应用程序。 为此,我尝试获取当前正在运行的应用程序,并检查它们的包名称是否允许。如果不允许,则显示一个新的活动。
当我研究时发现默认Android Settings
应用程序的软件包名称是com.android.settings
。现在我有一些疑问:
所有Android版本中,设置应用程序的软件包名称是否都是
com.android.settings
?如果不是,它们是什么?如何找到任务管理器的包名称?
我希望在我的应用程序中防止启动任务管理器和设置应用程序。 为此,我尝试获取当前正在运行的应用程序,并检查它们的包名称是否允许。如果不允许,则显示一个新的活动。
当我研究时发现默认Android Settings
应用程序的软件包名称是com.android.settings
。现在我有一些疑问:
所有Android版本中,设置应用程序的软件包名称是否都是com.android.settings
?如果不是,它们是什么?
如何找到任务管理器的包名称?
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;
}
情境不是很清楚。 我猜想这是向公众展示设备,但不希望他们损坏设备。
也许更好的方法是使用白名单而不是黑名单。这意味着商店应该说明哪些应用程序可以在设备上测试,如果是其他应用程序,则可以开始您的活动。
但这又需要维护:流行应用程序的包名称也可能会更改。最好提供一种通过在线服务更新应用程序设置的方法,以便您可以更改所需的软件包,而无需物理访问设备并且无需下载和安装完整的应用程序。
如果您只需要一个经过多人手的设备,并且不应被篡改,我建议使用修改后的设备。我只知道Sonim:他们提供一个库(需要在您的清单中提供Sonim提供的哈希密钥才能使用)。使用它,您可以禁止更改许多设置,而不会阻止访问整个设置应用程序。
通过adb将shell输入到设备中,并调用:
pm list packages
这将为您提供一个包列表。从那里,您应该能看到: com.android.settings
final PackageManager pm = getPackageManager();
List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
for (ApplicationInfo packageInfo : packages) {
Log.d("Packages", "" + packageInfo.packageName);
}