Es una pregunta antigua, pero aún activa, ya que no hay una función explícita de Android. Y los chicos de Facebook encontraron una solución, de alguna manera. Hoy, encontré una manera que funciona para mí. No es perfecto (vea las observaciones al final de esta respuesta) ¡pero funciona!
La idea principal es que actualizo el icono del acceso directo de mi aplicación, creado por el iniciador en mi pantalla de inicio. Cuando quiero cambiar algo en el icono de acceso directo, lo elimino primero y lo vuelvo a crear con un nuevo mapa de bits.
Aquí está el código. Tiene un botón increment. Cuando se presiona, el acceso directo se reemplaza por uno que tiene un nuevo número de conteo.
Primero necesita estos dos permisos en su manifiesto:
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
Entonces necesita estos dos métodos para instalar y desinstalar accesos directos. El shortcutAddmétodo crea un mapa de bits con un número. Esto es solo para demostrar que realmente cambia. Probablemente quieras cambiar esa parte con algo que quieras en tu aplicación.
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);
}
Y finalmente, aquí hay dos oyentes para agregar el primer acceso directo y actualizar el acceso directo con un contador incremental.
@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);
}
});
}
Observaciones:
Esta manera también funciona si su aplicación controla más accesos directos en la pantalla de inicio, por ejemplo, con diferentes extras en el Intent. Solo necesitan nombres diferentes para que se desinstale y reinstale el correcto.
El manejo programático de accesos directos en Android es una característica de Android bien conocida, ampliamente utilizada pero no oficialmente compatible. Parece funcionar en el iniciador predeterminado y nunca lo probé en ningún otro lado. Así que no me culpen, cuando reciban estos correos electrónicos de usuario "No funciona en mi teléfono XYZ, doble rooteado, súper arruinado"
El iniciador escribe un Toastcuando se instaló un acceso directo y uno cuando se desinstaló un acceso directo. Entonces obtengo dos Toasts cada vez que cambio el ícono. Esto no es perfecto, pero bueno, siempre y cuando el resto de mi aplicación sea perfecta ...