访问存储在 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 中找不到这样做的选项 您必须使用Intent
和ACTION_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 内部存储中的数据库的主要内容,如果未能解决你的问题,请参考以下文章