6

インストール後にホーム画面にショートカットを追加し、アプリケーションのアンインストール後に削除するアプリケーションを開発しています。アプリケーションはエンド ユーザーのデバイスにプレインストールされますが、アンインストールのオプションが必要です)。タスクは非常に単純に見えますが、実装する際に多くの問題に直面しました。

私がやった事:

  • アプリの初回起動時または newt デバイスの再起動時に com.android.launcher.action.INSTALL_SHORTCUT を使用して、ホーム画面にショートカットを追加します。
  • com.android.launcher.action.UNINSTALL_SHORTCUT を使用して手動でショートカットを削除します。

私ができないこと(そしてほとんどあきらめていること):

  • アプリケーションのアンインストール時にショートカットを自動的に削除します。

アンインストールされるアプリケーションはこのインテントを受け取らないため、 Intent.ACTION_PACKAGE_REMOVED を使用する方法はありません。いくつかのテストを実行したところ、アプリケーションで削除される唯一のショートカット タイプは、[ホーム画面に追加 => ショートカット => アプリケーション => アプリケーション アクティビティ] メニューから作成されるショートカットであることがわかりました。プログラムで作成されたショートカット、または AndroidManifest で宣言されたショートカットは、アプリのアンインストール後もホーム画面に残ります。

このトピックに関するドキュメントやフォーラムへの投稿はほとんどなく、なぜ Android のセキュリティ ポリシーと矛盾しない単純な操作をそのまま実装できなかったのか、少し混乱しています。

アプリケーションのアンインストール時に対応するショートカットを削除するよう OS に依頼する方法はありますか? アプリケーションが削除される前に、アプリケーションがアンインストールされているというイベントをキャッチできますか?

4

3 に答える 3

2

私はあなたがこれを行うことができるとは思わない。

まず、デバイスのファームウェアにプリインストールされているアプリケーションをアンインストールできないためです。これらのアプリケーション/systemは、読み取り専用のファイルシステムであるパー​​ティションに存在します。

次に、お気づきのとおり、アプリケーションはアンインストールされているという通知を受け取りません

ユーザーがアプリケーションを使用したくない場合は、携帯電話にプリインストールされているいくつかのアプリの場合と同じように、アプリケーションアイコンを無視しませんか?


編集:
アプリをプレインストールする場合(commonsware.comのメモのようにファームウェアにはプレインストールしない場合)、2つのAPKをプレインストールできます。ACTION_PACKAGE_REMOVEDそのうちの1つにはランチャーがなく、イベントを処理して呼び出しを行うブロードキャストレシーバーのみで構成されていますUNINSTALL_SHORTCUT

sharedUserIdショートカットを追加したのと同じアプリでショートカットを削除する必要がある明示的な権限チェックはないと思いますが、両方のAPKにを使用することで、とにかくそれを回避できます。

于 2010-01-25T11:54:19.687 に答える
2

install_shortcut インテントを正しく使用していないようです。おそらく、パラメーターなしでインテントを作成します。action Intent.ACTION_MAINパラメータでインテントを作成する必要があります。

Intent shortcutIntent = new Intent(Intent.ACTION_MAIN);
shortcutIntent.setClassName(this, this.getClass().getName());

Intent intent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));
Parcelable iconResource = Intent.ShortcutIconResource.fromContext(
            this,  R.drawable.launcher_icon);
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource);
sendBroadcast(intent);
于 2012-11-06T10:34:35.317 に答える
1

あなたが説明しているのは、ホーム画面の制限です。Launcher2 の次のバージョンでは、この問題が解決され、アプリに関連付けられたウィジェットとショートカットが自動的に削除されます。ただし、関連付けが見つからない場合 (たとえば、アプリが音楽プレーヤーへのショートカットを作成する場合)、一部のショートカットが残っている可能性があります。

于 2010-01-25T17:09:54.043 に答える