清除设备所有者应用程序数据

Clearing device owner application data

我正在开发 device owner app(通过 QR 码安装)在一个场景中,我需要切换用户,这涉及清除与应用程序相关的所有数据,如果应用程序不是"device owner app" 我会用 android

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

但由于它是 "device owner app" 我收到以下错误:

java.lang.SecurityException: Cannot clear data for a protected package

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


更新:

多亏了 @CommonsWare 我调用了 context.deleteDatabase("db_name") 所有数据库并清除了所有 SharedPreferences 像这样

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

这就够了...

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

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)

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

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

您可以通过删除您创建的文件或清除其内容来清除您的数据"the hard way"。

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