如何写入sd卡?

how to write to sd card?

我想在 Oppo A37 上将 SQLite 数据库备份到我的 SD 卡 我有权在清单

中写入外部
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

和这行代码

String outFileName = Environment.getExternalStorageDirectory().getPath() + 
"/SQLite/" + DBNAME + "_" + ext;

在 运行 之后,db 文件将以多种形式出现:

/storage/emulated/0/Sqlite/
/mnt/sdcard/SQLite/    
/sdcard/SQLite
/storage/sdcard0/SQLite/

也许更多,可能是同一事物的许多别名,但 全部在 phone 内部存储中

我发现我想要的是“/storage/sdcard1/SQLite/”,所以我尝试使用 adb

 adb -d shell "run-as com.photobangkok.expences cat 
/data/data/com.photobangkok.expences/databases/money_DB > /storage/sd
card1/SQLite/money_DB"

确实有用,但是

String outFileName = "/storage/sdcard1/SQLite/" + DBNAME + "_" + ext;

产生错误(权限被拒绝)并且被 LINT

拒绝

运行 不知道如何使用我的 sd 卡! 有人可以帮我告诉我正确的代码行吗?

一旦找到 SD 卡的路径,您会发现无法再写入。 Google 不想这样。通常你可以写入一个特定的应用程序目录,如 ..../Android/data/<packagename>/files.

如果幸运的话,您可以使用 getExternalFilesDirs() 找到最后一条路径。通常是第二个条目。

如果你想在整个 SD 卡上写入你应该使用存储访问框架并从 Intent.ACTION_OPEN_DOCUMENT_TREE 开始。