【发布时间】:2019-01-03 12:25:37
【问题描述】:
这是我的活动代码。
public class MainActivity extends AppCompatActivity {
ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv=findViewById(R.id.chckExternal);
filter();
}
这是我的过滤文件代码...
//--------------------Filter files----------------
public ArrayList<File> findSongs(File root) {
ArrayList<File> al = new ArrayList<>();
for(File singleFile : root.listFiles())
{
if(singleFile.isDirectory() && !singleFile.isHidden() ) {
al.addAll(findSongs(singleFile));
} else if(singleFile.getName().endsWith(".mp3") ||
singleFile.getName().endsWith(".MP3")) {
al.add(singleFile);
}
}
return al;
}
这是在listview中设置过滤器值的方法。
public void filter(){
ArrayList<File>
arrayList=findSongs(Environment.getExternalStorageDirectory());
ArrayList<String> convertedItemsList=new
ArrayList(arrayList.size());
for(int j=0;j < arrayList.size(); j++) {
convertedItemsList.add(arrayList.get(j)
.getParentFile().getName().toString());
}
ArrayAdapter arrayAdapter=new
ArrayAdapter(this,android.R.layout.simple_list_item_1,
convertedItemsList);
lv.setAdapter(arrayAdapter);
}
}
此代码能够从设备的内部存储读取文件,但无法从 OTG 和可移动 Sd 卡等外部存储读取文件....
【问题讨论】:
-
您需要使用
StorageManager.getStorageVolumes()列出所有可用驱动器,然后使用StorageVolume.createAccessIntent()获取权限。之后,您必须对文档提供程序而不是Files进行操作。 -
IOW,您在 Android 4.4+ 上没有对 removable storage 的直接读写权限。
-
好吧,没有直接的读取方式,但是有什么技巧可以从这些类型的存储中获取文件
-
@Pawel 你能不能给你的评论一些代码
-
请任何人帮助我
标签: android android-contentresolver usb-drive