1

私は、会社のデバイスにクライアントのセキュリティポリシーを適用するバックグラウンドサービスを作成してきました。サービスを最初にインストールするときに、初期設定データを入力できるようにアクティビティを起動します。この後、アクティビティを無効にします。

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();
}
4

1 に答える 1

0

残念ながら、それはできません。ユーザーがランチャーを再起動するまで待つ必要があります。

これに対処する一般的な方法の 1 つは、アイコンが「削除」されたらトースト/ダイアログを表示して、アイコンを完全に削除するためにランチャーを再起動するようユーザーに求めることです。

于 2012-04-06T14:36:02.887 に答える