2012-05-01 17 views
5

Quiero eliminar mi aplicación de la lista de aplicaciones y la lista de aplicaciones recientes. Así que he intentado desactivar mi actividad principal/lanzador con el siguiente código:la reinstalación de Android falla después de desactivar la actividad del iniciador

ComponentName componentToDisable = new ComponentName(context, MainActivity.class); 
context.getPackageManager().setComponentEnabledSetting(componentToDisable, 
      PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); 

Esto hace el trabajo. Pero ahora trato de reinstalar la aplicación y falla al decir que "la actividad clase MainActivity no existe". Si desinstalo la aplicación, la instalación funciona nuevamente. ¿Cómo puedo manejar este problema? Muchas gracias por su tiempo y ayuda

Respuesta

5

Descubrí que tengo que habilitar la actividad antes de volver a instalarla. Esto puede hacerse haciendo que un receptor de difusión escuche package_add/remove events y en onReceive active de nuevo la actividad.

public void onReceive(Context context, Intent intent) { 
    Log.i("Receiver","got event"); 
    ComponentName componentToDisable = new ComponentName(context,BlockableComponentActivity.class); 
    context.getPackageManager().setComponentEnabledSetting(componentToDisable, 
      PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); 
} 

extracto manifiesto para el receptor:

<receiver android:name="PackageChangeReceiver"> 
<intent-filter> 
    <action android:name="android.intent.action.PACKAGE_ADDED"/> 
    <action android:name="android.intent.action.PACKAGE_REPLACED"/> 
    <action android:name="android.intent.action.PACKAGE_REMOVED"/> 
    <data android:scheme="package"/> 
</intent-filter> 

Cuestiones relacionadas