我一直在编写一个后台服务,它在公司设备上强制执行我客户的安全策略。首次安装服务时,我启动一个活动,以便可以输入初始设置数据。在此之后,我禁用该活动:
ComponentName componentToDisable = new ComponentName("com.acme.background","com.acme.background.FirstLaunch");
getPackageManager().setComponentEnabledSetting(componentToDisable,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
FirstLaunch.this.finish();
此时,在 Home Launcher 刷新/重新启动之前,临时图标仍然可见。这在某些设备上可能会持续一段时间,我遇到的问题是用户感到困惑并通过图标卸载。我需要刷新主页启动器。这是我通过反射尝试过的一种方法,它为我提供了当前的主页启动器并访问其方法。
PackageManager PM = getPackageManager();
Intent home_intent = new Intent("android.intent.action.MAIN");
home_intent.addCategory("android.intent.category.HOME");
home_intent.addCategory("android.intent.category.DEFAULT");
ComponentName cn = home_intent.resolveActivity(PM);
Context foreignContext = createPackageContext("com.android.launcher", Context.CONTEXT_IGNORE_SECURITY | Context.CONTEXT_INCLUDE_CODE);
String clName = cn.getClassName();
Class<?> test = foreignContext.getClassLoader().loadClass(clName);
我尝试过触发方法并将字段归零以获取刷新/重新启动,但它似乎不起作用。有没有人有刷新 appDrawer/Icons 的解决方案?
编辑:
我已经包含了在触发对话框后启动的代码。以下是我正在使用的:
PackageManager PM = getPackageManager();
Intent home_intent = new Intent("android.intent.action.MAIN");
home_intent.addCategory("android.intent.category.HOME");
home_intent.addCategory("android.intent.category.DEFAULT");
ComponentName cn = home_intent.resolveActivity(PM);
String pkgName = cn.getPackageName();
Intent intent;
if (android.os.Build.VERSION.SDK_INT >= 9) {
Uri packageURI = Uri.parse("package:" + pkgName);
intent = new Intent("android.settings.APPLICATION_DETAILS_SETTINGS", packageURI);
startActivity(intent);
FirstLaunch.this.finish();
performCleanup();
} else {
//support for 2.1
intent = new Intent(Intent.ACTION_VIEW);
intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");
intent.putExtra("com.android.settings.ApplicationPkgName", pkgName);
intent.putExtra("pkg", pkgName);
startActivity(intent);
FirstLaunch.this.finish();
performCleanup();
}