[解決済み] Androidでアプリケーションのアイコンをプログラム的に変更するには?
質問
アプリケーションのアイコンをプログラムから直接変更することは可能ですか?
つまり
icon.png
の中に
res\drawable
フォルダーに格納されます。
アプリケーションのアイコンをプログラムから変更できるようにし、次回からはランチャーに前回選択したアイコンが表示されるようにしたいです。
解決方法は?
古い質問ですが、Androidには明確な機能がないため、まだ有効です。そして、facebookの人たちは、どうにかして回避策を見つけました。今日、私は自分にとって有効な方法を見つけました。完璧ではありませんが(この回答の最後にある備考を参照してください)、うまくいきました。
主なアイデアは、ホーム画面にランチャーで作成されたアプリのショートカットのアイコンを更新することです。ショートカットアイコン上の何かを変更したい場合、まずそれを削除し、新しいビットマップで再作成します。
以下はそのコードです。これはボタンがあります
increment
. 押されると、ショートカットは新しいカウント番号を持つものに置き換えられます。
まず、マニフェストにこの2つのパーミッションが必要です。
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
そして、ショートカットのインストールとアンインストールには、この2つの方法が必要です。その
shortcutAdd
メソッドは、数字を含むビットマップを作成します。これは実際に変化することを示すためだけです。おそらく、この部分をあなたのアプリで必要なものに変更したいのでしょう。
private void shortcutAdd(String name, int number) {
// Intent to be send, when shortcut is pressed by user ("launched")
Intent shortcutIntent = new Intent(getApplicationContext(), Play.class);
shortcutIntent.setAction(Constants.ACTION_PLAY);
// Create bitmap with number in it -> very default. You probably want to give it a more stylish look
Bitmap bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
Paint paint = new Paint();
paint.setColor(0xFF808080); // gray
paint.setTextAlign(Paint.Align.CENTER);
paint.setTextSize(50);
new Canvas(bitmap).drawText(""+number, 50, 50, paint);
((ImageView) findViewById(R.id.icon)).setImageBitmap(bitmap);
// Decorate the shortcut
Intent addIntent = new Intent();
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON, bitmap);
// Inform launcher to create shortcut
addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
getApplicationContext().sendBroadcast(addIntent);
}
private void shortcutDel(String name) {
// Intent to be send, when shortcut is pressed by user ("launched")
Intent shortcutIntent = new Intent(getApplicationContext(), Play.class);
shortcutIntent.setAction(Constants.ACTION_PLAY);
// Decorate the shortcut
Intent delIntent = new Intent();
delIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
delIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);
// Inform launcher to remove shortcut
delIntent.setAction("com.android.launcher.action.UNINSTALL_SHORTCUT");
getApplicationContext().sendBroadcast(delIntent);
}
そして最後に、最初のショートカットを追加し、カウンターをインクリメントしながらショートカットを更新する2つのリスナーを紹介します。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
findViewById(R.id.add).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
shortcutAdd("changeIt!", count);
}
});
findViewById(R.id.increment).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
shortcutDel("changeIt!");
count++;
shortcutAdd("changeIt!", count);
}
});
}
備考
-
この方法は、アプリがホーム画面上でより多くのショートカットを制御している場合にも有効です。
Intent
. 正しいものがアンインストールされ、再インストールされるように、異なる名前が必要なだけです。 -
Androidにおけるショートカットのプログラム的な処理は、よく知られており、広く使われていますが、公式にサポートされていないAndroidの機能です。デフォルトのランチャーでは動作しているようですが、他の場所では試したことがありません。そのため、「私のXYZ、ダブルルート、超高性能携帯電話では動作しません」というメールが来ても、私を責めないでください。
-
ランチャーは
Toast
ショートカットがインストールされたときと、アンインストールされたときに、それぞれ1つずつ。そのため、2つのToast
を変更するたびに、アイコンを変更します。これは完璧ではありませんが、まあ、私のアプリの他の部分が完璧である限りは......。
関連
-
AndroidエミュレーターのADBサーバーがACKしない問題
-
最新のandroidプロジェクトディレクトリにあるarmeabi-v7aとarmeabiの具体的な意味とその違いを教えてください。
-
Android Studioのgitの使用とgitの設定パス
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み] Androidアプリケーションのアクティビティ間でデータを受け渡すにはどうすればよいですか?
-
[解決済み] Androidレイアウトのフォルダにサブフォルダを含めることはできますか?
-
[解決済み] Androidでプログラムによるアプリの言語変更
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Android端末にADBが接続できない!を解決。理由: デバイスが認証されていない!
-
NetworkOnMainThreadException
-
AndroidエミュレーターのADBサーバーがACKしない問題
-
GIF、Lottie、SVGA
-
アンドロイドスタジオでJunitのエラー問題を解決する
-
Androidカスタムドロップダウンリストボックスコントロール
-
Android--shape--描画のコーナー、グラデーション、パディング、サイズ、ソリッド、ストロークのプロパティを指定する。
-
AndroidStudioのショートカット 検索/置換
-
android.content.ActivityNotFoundException を解決します。Intent問題を処理するActivityが見つからない
-
[解決済み】アプリランチャーアイコンに通知回数を表示する方法【重複あり