访问存储在 Android Q 内部存储中的数据库

Posted

技术标签:

【中文标题】访问存储在 Android Q 内部存储中的数据库【英文标题】:Accessing Database stored in Internal Storage of Android Q 【发布时间】:2021-06-21 05:34:35 【问题描述】:

我想访问存储在内部存储中的数据库。我正在使用以下代码来执行此操作。

db_connection_string = "URI=file:" + GetandroidInternalFilesDir() + "/employee.db";
Debug.Log("db_connection_string" + db_connection_string);
db_connection = new SqliteConnection(db_connection_string);

以下是我的GetAndroidInternalFilesDir 函数。

public static string GetAndroidInternalFilesDir()

    string[] potentialDirectories = new string[]
    
        "/storage/Company",
        "/sdcard/Company",
        "/storage/emulated/0/Company",
        "/mnt/sdcard/Company",
        "/storage/sdcard0/Company",
        "/storage/sdcard1/Company"
    ;

    if(Application.platform == RuntimePlatform.Android)
    
        for(int i = 0; i < potentialDirectories.Length; i++)
        
            if(Directory.Exists(potentialDirectories[i]))
            
                return potentialDirectories[i];
            
        
    
    return "";

上面的代码在所有

更新:

我已使用以下代码触发范围存储的权限,但仍然显示零成功。

void initiate()

    AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject packageManager = jc.Call<AndroidJavaObject>("getPackageManager");
    AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("android.provider.Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION");
    AndroidJavaObject launchIntent = packageManager.Call<AndroidJavaObject>("getLaunchIntentForPackage", packageManager);
    launchIntent = jo.Call<AndroidJavaObject>("setData", packageManager);
    jc.Call("startActivity", launchIntent);

【问题讨论】:

你的代码没有意义,好像有一个公司目录,那么你为什么不知道它的路径?谁会创建该目录?此外,如果有一个数据库文件,那么您为什么不知道它的路径?谁创建了该文件? permission for scoped storage ???您不需要使用范围存储的权限,因为您有义务使用它。它是强制执行的。你没有选择。该代码请求all files access 【参考方案1】:

如果您想在列出的目录中搜索(不在您的应用范围内),那么您需要MANAGE_EXTERNAL_STORAGE 权限。 HERE中的一些文档

【讨论】:

当然,但我在 Unity3D 中找不到这样做的选项 您必须使用IntentACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION 操作来执行startActivity(...) 方法。一些示例如何在 HERE、HERE 或 HERE 我已经尝试过了,但运气仍然为零 :( 请阅读更新后的问题 您在发布的代码中设置action 的位置以及为什么设置data?只需使用launchIntent = new AndroidJavaObject("android.content.Intent", "android.settings.MANAGE_ALL_FILES_ACCESS_PERMISSION");,然后只需使用jc.Call("startActivity", launchIntent); 调用它

以上是关于访问存储在 Android Q 内部存储中的数据库的主要内容,如果未能解决你的问题,请参考以下文章

在 Android Q 中从外部存储访问照片

android系统怎么设置内部存储的访问权限

android系统怎样设置内部存储的访问权限

Android Q (10) 请求访问所有存储的权限。范围存储

android中的文件操作详解以及内部存储和外部存储

Android数据存储之内部存储外部存储