Це старе питання, але все ще активне, оскільки немає чіткої функції Android. А хлопці з фейсбуку знайшли роботу - якось. Сьогодні я знайшов спосіб, який працює для мене. Не ідеально (див. Зауваження в кінці цієї відповіді), але це працює!
Основна ідея полягає в тому, щоб я оновлював ярлик ярлика свого додатка, створений пусковим пристроєм на моєму головному екрані. Коли я хочу щось змінити на піктограмі ярлика, спочатку я його видаляю і відтворюю за допомогою нової растрової карти.
Ось код. У ньому є кнопка increment. При натисканні ярлик замінюється на той, який має нове підрахункове число.
Спочатку вам потрібні ці два дозволи у вашому маніфесті:
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
Тоді вам знадобляться ці два способи встановлення та видалення ярликів. 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);
}
І нарешті, ось два слухача, щоб додати перший ярлик та оновити ярлик за допомогою збільшення лічильника.
@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коли ярлик був встановлений, і той, коли ярлик був видалений. Тому я отримую дві Toastсекунди щоразу, коли змінюю іконку. Це не ідеально, але добре, якщо решта мого додатка ідеальна ...