7.1 系统挂载U盘后,无法读写
U盘挂载后,执行 mount命令,查找所有挂载的路径。
发现U盘挂载在 /mnt/media_rw/2E3C-B9C3 下,第三方应用无法读写U盘中信息。由于权限问题所致。
修改: 添加权限。路径:framework/base/data/etc/platform.xml
- <permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
- <permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+ <permission android:name="android.permission.READ_EXTERNAL_STORAGE">
<group gid ="media_rw" />
<permission />
+ <permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
<group gid ="media_rw" />
<permission />
第三方应用代码:获取U盘挂载路径
public static String getUdiskPath() {
String upath = "";
try {
Runtime runtime = Runtime.getRuntime();
// 运行mount命令,获取命令的输出,得到系统中挂载的所有目录
Process proc = runtime.exec("mount");
InputStream is = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
String line;
BufferedReader br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
Log.d("", line);
// 将常见的linux分区过滤掉
// SdList.add(line);
if (line.contains("secure"))
continue;
if (line.contains("asec"))
continue;
// 下面这些分区是我们需要的
if (line.contains("vfat") || line.contains("fuse")
|| line.contains("fat") || (line.contains("ntfs"))) {
// 将mount命令获取的列表分割,items[0]为设备名,items[1]为挂载路径
String items[] = line.split(" ");
if (items != null && items.length > 1) {
String path = items[2].toLowerCase(Locale.getDefault());
// 添加一些判断,确保是sd卡,如果是otg等挂载方式,可以具体分析并添加判断条件
if (path != null && path.contains("media_rw")) {
upath = path;
}
}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return upath;
}