Android не получает Intent ACTION_PACKAGE_REMOVED в удаленной упаковке
Когда мое приложение для Android будет удалено, я также хотел бы удалить файлы, созданные на SD-карте, поскольку они могут потреблять много мегабайт и могут использоваться только для моего приложения.
Кажется, что получение УДАЛЕННОГО УСТАНАВЛИВАНИЯ было бы местом для этого.
Тем не менее, мой широковещательный приемник никогда не вызывается - он, кажется, был удален до отправки 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>
Ответы
Ответ 1
В документации говорится:
Пакет, который удаляется, не получает этого намерения.
Android 2.2 добавил getExternalFilesDir()
, который укажет на место на внешней памяти, которое Android будет автоматически очищать, когда ваше приложение будет удалено. Тем не менее, это только для Android 2.2, и есть признаки того, что он не работает особенно хорошо на данный момент. Тем не менее, это то, что нужно учитывать в 2011 году.
Кроме того, все, что вы действительно можете сделать, это предложить выбор из меню, где пользователь может выполнить очистку, и надеюсь, что пользователи будут использовать его перед удалением.
Ответ 2
Вы должны добавить разрешение в манифест.
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_REMOVED" />