1

我正在开发一个设备所有者应用程序(通过 QR 码安装)在一种情况下,我需要切换用户,这涉及清除与应用程序相关的所有数据,如果该应用程序不是“设备所有者应用程序”我会用安卓

((ActivityManager) m_context.getSystemService(Context.ACTIVITY_SERVICE)).clearApplicationUserData();

但由于它是“设备所有者应用程序”,我收到以下错误:

java.lang.SecurityException:无法清除受保护包的数据

是否有任何其他 api / 方法来清除设备所有者应用程序的数据?


更新:

感谢@CommonsWare,我打电话context.deleteDatabase("db_name")给所有数据库并像这样清除了所有 SharedPreferences

    SharedPreferences.Editor editor = preferences.edit();
    editor.clear();
    return editor.commit();

这已经足够了......

4

2 回答 2

1

您可以通过删除您创建的文件或清除其内容来“艰难地”清除您的数据。

您可能希望通过 Android Studio 的设备文件管理器或 来检查您应用的内部存储部分adb shell,以查看是否还有其他您未直接创建的文件需要清除(例如,来自WebView)。

于 2019-07-08T11:04:36.997 回答
0

如果您是 Android 9 Pie 设备(需要 SDK 28)的设备所有者,您可以尝试此操作:

DevicePolicyManager mDPM = (DevicePolicyManager) 
    this.getSystemService(Context.DEVICE_POLICY_SERVICE);
Componentname mDeviceAdminRcvr = 
    new ComponentName(this, YourDeviceAdminReceiver.class);
mDPM.clearApplicationUserData(
            mDeviceAdminRcvr, 
            String packageName, 
            Executor executor, 
            DevicePolicyManager.OnClearApplicationUserDataListener listener)

但我认为这是为了清除其他应用程序上的数据。

您能否解释一下为什么需要在用户切换时从设备所有者应用程序中清除数据?可能还有另一种方法可以做您需要做的事情,因为无论如何您都会切换到辅助用户。我的实现只需要创建/删除用户(在临时用户之前),然后通过托管配置使用 AE API 及其应用程序配置用户。

于 2019-01-04T23:24:55.157 回答