三星设备是带有Android 7.0 API 24的T810,并且有一张SD卡,我们创建的其他应用程序已经写入SD卡上的SQLite数据库,没有任何问题。可悲的是,我们不知道这是否是在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没有问题
答案 0 :(得分:0)
首先,产生这个答案的信息由@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;
}