プログラムから直接アプリケーションアイコンを変更することはできますか?つまり、フォルダを
変更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
ショートカットがinstalladの場合と、ショートカットがアンインストールされた場合のを書き込みます。そのためToast
、アイコンを変更するたびに2が表示されます。これは完璧ではありませんが、私のアプリの残りの部分が完璧である限り、まあ...
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加