¿Es posible actualizar el Manifiesto de Android de forma programática?
Lo que quiero lograr:
Estoy creando una aplicación que cambia el icono de la aplicación y el nombre de la aplicación mediante programación.
Lo que he conseguido:
Ya he logrado esto porque sólo hay 5 nombres e iconos al declarar actividad-alias en android manifiesto.
- Hay 2 archivos de AndroidManifest.xml en mi aplicación Android Eclipse Developer, ¿cuál debo editar?
- Cargar actividad y / o el logotipo de la aplicación mediante programación de Manifest
- ¿Cómo puedo cambiar mi AndroidManifest como está siendo empaquetado por maven
- Relacionar URI con <data> como http://example.com/algo en AndroidManifest
- Principal no se puede resolver o no es un campo
Problema que estoy enfrentando:
Si sólo tiene 5 nombres, es fácil declararlo en el manifiesto. Pero ¿y si no sabes el no. De nombres y tiene que actualizar el manifiesto mediante programación.
A continuación se muestra mi código:
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.drawerstack"> <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /> <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@style/AppTheme.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity-alias android:label="@string/app_name1" android:icon="@drawable/ic_launcher" android:name=".MainActivity-Red" android:enabled="false" android:targetActivity=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity-alias> <activity-alias android:label="@string/app_name2" android:icon="@drawable/ic_launcher_1" android:name=".MainActivity-Pink" android:enabled="false" android:targetActivity=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity-alias> <activity-alias android:label="@string/app_name3" android:icon="@drawable/ic_launcher_2" android:name=".MainActivity-Blue" android:enabled="false" android:targetActivity=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity-alias> <activity-alias android:label="@string/app_name4" android:icon="@drawable/ic_launcher_3" android:name=".MainActivity-Grey" android:enabled="false" android:targetActivity=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity-alias> </application> </manifest>
En MainActivity.java
img.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (view.getTag().equals(0)) { changeIcon("com.drawerstack.MainActivity-Red"); removeIcon("com.drawerstack.MainActivity"); removeIcon("com.drawerstack.MainActivity-Pink"); removeIcon("com.drawerstack.MainActivity-Blue"); removeIcon("com.drawerstack.MainActivity-Grey"); } else if (view.getTag().equals(1)) { changeIcon("com.drawerstack.MainActivity-Pink"); removeIcon("com.drawerstack.MainActivity-Blue"); removeIcon("com.drawerstack.MainActivity-Grey"); removeIcon("com.drawerstack.MainActivity-Red"); removeIcon("com.drawerstack.MainActivity"); } else if (view.getTag().equals(2)) { changeIcon("com.drawerstack.MainActivity-Blue"); removeIcon("com.drawerstack.MainActivity-Pink"); removeIcon("com.drawerstack.MainActivity-Grey"); removeIcon("com.drawerstack.MainActivity-Red"); removeIcon("com.drawerstack.MainActivity"); } else if (view.getTag().equals(3)) { changeIcon("com.drawerstack.MainActivity-Grey"); removeIcon("com.drawerstack.MainActivity-Pink"); removeIcon("com.drawerstack.MainActivity-Red"); removeIcon("com.drawerstack.MainActivity-Blue"); removeIcon("com.drawerstack.MainActivity"); } } }); private void changeIcon(final String pkgName) { doAsynchronousTask = new TimerTask() { @Override public void run() { // TODO Auto-generated method stub Date now = new Date(); if(now.after(afterDate)){ timer.cancel(); Common.dismissProgressDialog(MainActivity.this); finish(); } } }; timer.schedule(doAsynchronousTask, 0, 50000); Common.loadProgressDialog(MainActivity.this,false); getPackageManager().setComponentEnabledSetting( new ComponentName("com.drawerstack", pkgName), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); } private void removeIcon(String removePkg) { getPackageManager().setComponentEnabledSetting( new ComponentName("com.drawerstack", removePkg), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); }
Toda ayuda es apreciada;)
- Manifiesto Herramientas de fusión: reemplazar no tiene ningún efecto
- Uses-sdk: minSdkVersion 7 no puede ser menor que la versión 9 declarada en la biblioteca
- ¿Cómo podemos cambiar el icono de la aplicación Android de forma dinámica en Android
- Android Diseño principios de diseño
- Android - ajustar scrollview cuando el teclado está para Android 5.0 (piruleta)
- ¿Cómo agregar Actividad a manifest.xml de manera correcta?
- Diseño de aplicaciones de Android para tablets
- La lista de menús sale de la pantalla cuando anyDensity = "false"
Asumiendo que su pregunta es la que está en el título:
¿Es posible actualizar el Manifiesto de Android de forma programática?
La respuesta es no , no es posible hacerlo programáticamente.
Puede activar o desactivar los componentes que se declaran en su manifiesto, pero no puede agregar o eliminar algo de allí, ya que, como dice el nombre, es un archivo de manifiesto, cuyo sistema "lee" cuando instala su aplicación. Así que declaras la interfaz de tu aplicación en ese manifiesto, más tarde no puedes cambiarlo, a menos que vuelvas a instalar la aplicación con otro manifiesto.
Suponga que el sistema le proporcionó la capacidad de hacerlo. A continuación, agregaría un poco de permiso a su manifiesto de forma dinámica, mientras que el usuario no ha aprobado que mientras estaba descargando su aplicación de Play Store.
- Vector dibujable no dibujado correctamente en Android Studio
- Cómo almacenar Lista de dispositivos adb en la red en php array