私は、会社のデバイスにクライアントのセキュリティポリシーを適用するバックグラウンドサービスを作成してきました。サービスを最初にインストールするときに、初期設定データを入力できるようにアクティビティを起動します。この後、アクティビティを無効にします。
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();
この時点で、ホームランチャーが更新/再起動されるまで、一時的なアイコンは引き続き表示されます。これは一部のデバイスではかなり時間がかかる可能性があり、私が抱えている問題は、ユーザーが混乱してアイコンを介してアンインストールすることです。ホームランチャーを更新する必要があります。これが私がリフレクションを介して試した1つのメソッドで、現在のホームランチャーとそのメソッドへのアクセスを提供します。
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);
メソッドを起動し、フィールドをnullにして更新/再起動を試みましたが、機能しないようです。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();
}