关于ZAKER 融媒体解决方案 合作 加入

android- 模拟器与三星设备 SD 卡存储

CocoaChina 10-14

三星设备是带有Android 7.0 API 24 的 T810, 并且具有 SD 卡 , 我们创建的其他应用程序已将该 SD 卡正确写入 SD 卡上的 SQLite DB. 可悲的是 , 我们不知道这是否是在 Android 7.0 更新之前 . 到目前为止 , 我们无法使用下面发布的代码来写入 SD 卡 . 在运行 API 26 的仿真器上 , 设备文件浏览器正在显示此信息

数据库仿真器

/mnt/user/0/primary/Android/data/com.androidstackoverflow.onepass/files/Documents/PassWord

存储

/storage/emulated/0/Android/data/com.androidstackoverflow.onepass/files/Documents/PassWord

SD 卡模拟器

/sdcard/Android/data/com.androidstackoverflow.onepass/files/Documents/PassWord

public String getThePath ( ) { File removable = ContextCompat.getExternalFilesDirs ( this,null ) [ 0 ] ; if ( removable.exists ( ) && removable.canRead ( ) && removable.canWrite ( ) ) { THE_PATH = String.valueOf ( removable ) ; THE_PATH = THE_PATH + "/Documents/"; }else { Toast.makeText ( getApplicationContext ( ) ,"NO SD CARD", Toast.LENGTH_LONG ) .show ( ) ; } return THE_PATH;}

我们需要帮助的问题是这是三星设备问题还是模拟器不是真实信息?

权限设置为 READ 和 WRITE

我们甚至试图对路径进行硬编码 . 看了很多关于此主题的 SO 帖子 . 文件夹 Documents / DB Name 的创建没有问题

最佳答案

首先 , 产生此答案的信息由 @CommonsWare 提供

它张贴在这里 , 以便其他人无法学习 , 因此我可以获得积分

问题是如何管理三星平板电脑上的存储位置

最重要的是您了解测试是否将 SD 卡安装在仿真器上无法正常工作的下面是我非常奇怪的代码 , 用于测试是否已安装 SD 卡 . 然后是修改后的代码 , 可让您管理存储位置

File fi = new File ( "storage/" ) ; File [ ] lst = fi.listFiles ( ) ;// String top = String.valueOf ( lst [ 1 ] ) ; String bot = String.valueOf ( lst [ 0 ] ) ; if ( bot.contains ( "-" ) ) { STORAGE_LOCATION = 1; } if ( top.contains ( "storage/enc_emulated" ) ) { STORAGE_LOCATION = 0; } public String getThePath ( ) { File removable = ContextCompat.getExternalFilesDirs ( this,null ) [ STORAGE_LOCATION ] ; if ( STORAGE_LOCATION == 1 ) { THE_PATH = String.valueOf ( removable ) ; THE_PATH = THE_PATH + "/Documents/"; } if ( STORAGE_LOCATION == 0 ) { THE_PATH = String.valueOf ( removable ) ; THE_PATH = THE_PATH + "/INTERNAL/"; Toast.makeText ( getApplicationContext ( ) ,"NO SD CARD", Toast.LENGTH_LONG ) .show ( ) ; } return THE_PATH;}

以上内容由"CocoaChina"上传发布 查看原文