2010-09-05 6 views
6

Wenn meine Android-App entfernt wird, möchte ich auch Dateien entfernen, die die App auf der SD-Karte erstellt hat, da diese viele Megabyte verbrauchen können und nur für meine App nützlich sind.android nicht erhalten Absicht ACTION_PACKAGE_REMOVED im entfernten Paket

Es scheint, dass der Empfang der PACKAGE REMOVED-Absicht der Ort dafür wäre. meine Rundfunkempfänger wird jedoch nie genannt - es scheint, vor Vorsatz

gesendet wird, das Paket entfernt gelöscht worden sein

Der Code ist:

 
public class UninstallReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    String action= intent.getAction(); 
    Log.i("U", "ACTION " + action); 
    etc. 
} 
} 

und im Manifest:

 
<application android:debuggable="true" 
    android:icon="@drawable/icon" 
    android:label="@string/app_name"> 

    <receiver android:name ="com.boom.UninstallReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.PACKAGE_REMOVED"/> 
    <data android:scheme="package" /> 
    </intent-filter> 
    </receiver> 

Antwort

11

Die documentation sagt:

Das Paket, das entfernt wird, nicht erhalten diese Absicht.

Android 2.2 hinzugefügt getExternalFilesDir(), die an einem Ort auf dem externen Speicher zeigen wird, dass Android wird automatisch aufzuräumen, wenn die Anwendung deinstalliert wird. Dies gilt allerdings nur für Android 2.2, und es gibt Hinweise, dass es im Moment nicht besonders gut funktioniert. Es ist jedoch etwas für 2011 zu beachten.

Darüber hinaus, alles, was Sie wirklich tun können, bietet eine Menüauswahl irgendwo für den Benutzer, um die Bereinigung zu tun, und hoffe, dass Benutzer es vor der Deinstallation von Ihnen verwenden.

-3

Sie müssen die Berechtigung in der manifast hinzufügen.

<uses-permission android:name="android.permission.BROADCAST_PACKAGE_REMOVED" /> 
+2

Diese Berechtigung wird nur System-Apps erteilt. Also kann ich es nicht in meiner App verwenden. – Borys

+3

Diese Antwort ist so falsch. Diese Erlaubnis wird benötigt, um ** den Broadcast Intent 'PACKAGE_REMOVED' ** zu senden. Selbst wenn das System Ihnen diese Erlaubnis gewähren würde (was es nicht tut), würde es immer noch nicht helfen. Diese Antwort sollte gelöscht werden. –