2012-05-01 5 views
5

Desidero rimuovere la mia app dall'elenco di app e dall'elenco di app recenti. Così ho provato a disabilitare la mia attività principale/avvio con il seguente codice:La reinstallazione di Android non riesce dopo aver disattivato l'attività di avvio

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

Questo fa il lavoro. Ma ora provo a reinstallare l'app e non funziona dicendo "attività MainActivity non esiste". Se disinstalla l'app, l'installazione funziona di nuovo. Come posso gestire questo problema? Grazie mille per il tuo tempo e aiuto

risposta

5

Ho scoperto che devo abilitare l'attività prima di reinstallarla. Questo può essere fatto avendo un ricevitore broadcast in ascolto di package_add/remove events e in onReceive rendere di nuovo l'attività abilitata.

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); 
} 

estratto manifesto per il ricevitore:

<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>