2010-09-05 79 views
6

当我的Android应用程序被删除,我想也删除的应用程序已经在SD卡上创建的文件,因为这些可以消耗很多兆字节,并且只使用到我的应用程序。Android在去除包装不接受意向ACTION_PACKAGE_REMOVED

看来,收到包装中取出的意图是做这个的地方。 然而,我的广播接收器不会被调用 - 它似乎被送到

除去包装意图之前已被删除

的代码是:

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

,并在清单:

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

回答

11

documentation说:

正在删除没有收到包裹这个意图。

Android 2.2添加了getExternalFilesDir(),它将指向外部存储器上的一个位置,Android将在卸载应用程序时自动清除该位置。但是,这只适用于Android 2.2,并且有迹象表明,目前这种方式效果不佳。然而,这是2011年要记住的东西。

除此之外,你真的可以做的是提供一个菜单选择的地方为用户做清理,并希望用户在卸载你之前使用它。

-3

必须在manifast添加权限。

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

此权限只授予系统应用。所以我不能在我的应用程序中使用它。 – Borys 2013-06-07 15:39:34

+3

这个答案是错的。为了发送广播意图'PACKAGE_REMOVED' **,需要此权限。即使系统会授予你这个权限(它不会),它仍然不会帮助你。这个答案应该被删除。 – 2015-04-12 11:09:48