Saltar al contenido

¿Cómo cambiar el icono de una aplicación mediante programación en Android?

Al fin después de tanto batallar pudimos encontrar la respuesta de este enigma que agunos lectores de nuestro espacio han tenido. Si tienes algún detalle que aportar no dudes en dejar tu conocimiento.

Solución:

Prueba esto, me funciona bien:

1 . Modifica tu MainActivity sección en AndroidManifest.xmleliminar de él, alinear con MAIN categoría en intent-filter sección


    
        ==>  <== Delete this line
        
    

2 . Crear , para cada uno de tus iconos. Me gusta esto


    
        
        
       

3 . Establecer programáticamente: establecer HABILITAR attribute para el apropiado activity-alias

 getPackageManager().setComponentEnabledSetting(
        new ComponentName("ru.quickmessage.pa", "ru.quickmessage.pa.MainActivity-Red"), 
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

Tenga en cuenta que al menos uno debe estar habilitado en todo momento.

Es una pregunta antigua, pero sigue 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 (ver comentarios al final de esta respuesta) ¡pero funciona!

La idea principal es que actualizo el ícono del acceso directo de mi aplicación, creado por el iniciador en mi pantalla de inicio. Cuando quiero cambiar algo en el ícono de acceso directo, primero lo elimino y lo vuelvo a crear con un nuevo mapa de bits.

Aquí está el código. tiene un boton increment. Cuando se presiona, el atajo se reemplaza por uno que tiene un nuevo número de conteo.

Primero necesita estos dos permisos en su manifiesto:



Entonces necesita estos dos métodos para instalar y desinstalar accesos directos. los shortcutAdd El método crea un mapa de bits con un número en él. 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 atajo y actualizar el atajo 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:

  • De 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 la Intent. Solo necesitan nombres diferentes para que se desinstale y se vuelva a instalar el correcto.

  • El manejo programático de accesos directos en Android es una característica de Android bien conocida, ampliamente utilizada pero no compatible oficialmente. Parece funcionar en el iniciador predeterminado y nunca lo probé en ningún otro lugar. Así que no me culpes, cuando recibas este correo electrónico de usuario “No funciona en mi teléfono XYZ, con doble raíz y súper arruinado”

  • El lanzador escribe un Toast cuando se instaló un acceso directo y uno cuando se desinstaló un acceso directo. asi que tengo dos Toasts cada vez que cambio el icono. Esto no es perfecto, pero bueno, mientras el resto de mi aplicación sea perfecta…

No puede cambiar el manifiesto o el recurso en el APK firmado y sellado, excepto a través de una actualización de software.

Al final de todo puedes encontrar las aclaraciones de otros creadores, tú además tienes la libertad de insertar el tuyo si te gusta.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 3.5)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *