0


Android --- fota升级后,数据丢失

现象是手机从AndroidR升级到AndroidS以后,clock在R上的数据丢失了。
经过深入的调查发现,并不是数据丢失;而是R和S的数据存储位置不同导致的。

使以下命令查询闹钟的数据库存储位置:

adb shell find /data  -name alarms.db

R是:
/data/data/com.android.deskclock/databases/alarms.db
/data/user/0/com.android.deskclock/databases/alarms.db
S是:
/data/user_de/0/com.android.deskclock/databases/alarms.db
从R升级到S后是:
/data/data/com.android.deskclock/databases/alarms.db
/data/user/0/com.android.deskclock/databases/alarms.db
/data/user_de/0/com.android.deskclock/databases/alarms.db

/data/data/分区和/data/user/0/分区是凭据加密存储,这是默认存储位置,仅在用户解锁设备后可用。
/data/user_de/0/分区是设备加密存储,该存储位置在“直接启动”模式下和用户解锁设备后均可使用。

如果在AndroidManifest.xml中增加
android:defaultToDeviceProtectedStorage="true"
此属性只能在备加密存储创建应用的分区,只能迁移SharedPreferences的数据存储,不能迁移数据库的数据存储。

根据开发者网址的推荐,在provider中调用Context.createDeviceProtectedStorageContext():删除原来的凭据加密存储分区中存储的数据,并将原来的数据迁移到新创建的设备加密存储分区。

支持“直接启动”模式 | Android 开发者 | Android Developers

@Override
    public boolean onCreate() {
        Context context = getContext();
        Context storageContext;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            // All N devices have split storage areas, but we may need to
            // migrate existing database into the new device encrypted
            // storage area, which is where our data lives from now on.
            storageContext = context.createDeviceProtectedStorageContext();
            if (!storageContext.moveDatabaseFrom(context, ClockDatabaseHelper.DATABASE_NAME)) {
                LogUtils.v("Failed to migrate database: ", ClockDatabaseHelper.DATABASE_NAME);
            }
        } else {
            storageContext = context;
        }
        mOpenHelper = new ClockDatabaseHelper(storageContext);
        return true;
    }

但是只调用Context.createDeviceProtectedStorageContext()方法,只能迁移数据库的数据存储,无法迁移SharedPreferences的数据存储。可以使用以下方法进行SharedPreferences存储数据的迁移(注意要将所有的SharedPreferences进行迁移)。

storageContext.moveSharedPreferencesFrom(context,PreferenceManager.getDefaultSharedPreferencesName(context));

本文转载自: https://blog.csdn.net/m0_50408097/article/details/125263847
版权归原作者 袁美丽.. 所有, 如有侵权,请联系我们删除。

“Android --- fota升级后,数据丢失”的评论:

还没有评论