在不使用 android:allowBackup="false" 的情况下卸载应用程序后删除共享首选项
Delete shared preferences after app uninstall without using android:allowBackup="false"
我想在卸载应用程序后删除共享首选项。而且我不想使用 android:allowBackup="false" 选项,因为我读到不建议将其用于生产中的应用程序。有没有其他方法可以在卸载后删除应用程序的共享首选项,同时仍保留备份(升级期间)
可以使用BroadcastReceiver
将此添加到 Manifest
<receiver android:name=".DeleteReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<data android:scheme="package"/>
</intent-filter>
</receiver>
和BroadcastReceiver
class
public class DeleteReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//remove preferences
SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
settings.edit().clear().commit();
}
}
更新: 经过一些研究,我发现你 cannot receive something when your app is deleted。
The package that is being removed does not receive this Intent.
唯一的解决办法是使用第二个应用程序来获取它。抱歉让您失望了。
所以在你的情况下 android:allowBackup=“false”
是 唯一 删除设置的方法。
我想在卸载应用程序后删除共享首选项。而且我不想使用 android:allowBackup="false" 选项,因为我读到不建议将其用于生产中的应用程序。有没有其他方法可以在卸载后删除应用程序的共享首选项,同时仍保留备份(升级期间)
可以使用BroadcastReceiver
将此添加到 Manifest
<receiver android:name=".DeleteReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<data android:scheme="package"/>
</intent-filter>
</receiver>
和BroadcastReceiver
class
public class DeleteReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//remove preferences
SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
settings.edit().clear().commit();
}
}
更新: 经过一些研究,我发现你 cannot receive something when your app is deleted。
The package that is being removed does not receive this Intent.
唯一的解决办法是使用第二个应用程序来获取它。抱歉让您失望了。
所以在你的情况下 android:allowBackup=“false”
是 唯一 删除设置的方法。