当我将领域数据库本地存储在文件夹中时,我的App在android 11上崩溃了吗?

问题描述

当我要将领域数据库保存在本地内部存储中时,该应用程序在Android 11上崩溃。该应用程序可以在所有其他版本上运行,但今天我将其应用程序更新为android 11,并且崩溃了。

E/AndroidRuntime: FATAL EXCEPTION: main
Process:  PID: 7882
io.realm.exceptions.RealmError: Unrecoverable error. open() Failed: Operation not permitted in io_realm_internal_Group.cpp line 210
    at io.realm.internal.Group.nativeWritetoFile(Native Method)
    
   
      private Realm realm;

      try {

        File file = new File(folderPath);
        if (!file.exists()) {
            file.mkdir();
        }
      
        realm = new File(file,fileName);
       
        if (realm .exists()) {
            realm .delete();
        }
       
        realm.writecopyTo(realm ); // crashing here in this line

    } catch (IOException e) {
        e.printstacktrace();
      
    }

解决方法

在android 11中,关于应用访问方式的存储权限已完全更改。现在,应用程序只能访问自己的数据目录,而不能访问其他存储。某些无法访问文件系统的应用程序(例如文件管理器)需要具有所有文件访问权限。 您的应用在android 11中崩溃,最有可能是因为它没有在存储上进行写入的权限。 有关更多信息-Read here

,

阅读文档后,我通过将getExternalStorageDirectory替换为context.getExternalFilesDir();解决了该问题。将领域数据库本地保存在要备份的文件夹中。

See Doc