【发布时间】:2014-09-15 01:50:36
【问题描述】:
我在 Android 2.3 上运行播放 mp3 的应用程序时遇到问题。 这些mp3从远程服务器下载到/data/data/com.my.package.name/,默认文件权限为-rw-------。
与 post HONEYCOMB 设备不同(根据我的测试),如果文件权限不是 -rw-rw-rw-,媒体播放器会拒绝读取 mp3。
我显然验证了如果我使用 adb shell 将文件权限设置为 666,那么媒体播放器会成功读取它。
所以,经过网上的一些研究,我在编写文件后尝试实现以下代码:
String chmodString = "chmod 666 " + getActivity().getApplicationContext().getFilesDir().getParentFile().getPath() +"/" + fileName;
Process sh = Runtime.getRuntime().exec("su", null, new File("/system/bin/"));
OutputStream osChgPerms = sh.getOutputStream();
try {
osChgPerms.write((chmodString).getBytes("ASCII"));
osChgPerms.flush();
osChgPerms.close();
sh.waitFor();
} catch (InterruptedException e) {
Log.d("2ndGuide", "InterruptedException." + e);
} catch(IOException e) {
Log.d("2ndGuide", "IO Exception." + e);
}
这段代码在片段中执行,但我认为这不会改变任何东西。
不幸的是,如果此代码在 HONEYCOMB 后的设备上工作,它没有用处,
osChgPerms.write((chmodString).getBytes("ASCII"));
在我真正需要的地方抛出一个IOException: broken pipe on Android 2.3。
其实我真的不知道问题是出在chmod还是出在执行方式上。
任何解决方案让它工作,或者让媒体播放器在 pre HONEYCOMB 上工作而不更改文件权限?
【问题讨论】:
-
没有理由为此使用“su”,因为这些文件已经归您的用户所有。使用 File 类的 setReadable(true, false) (如果你坚持的话,可以写,虽然这看起来没有必要)。
-
@ChrisStratton 在 Android API 9+ 中
-
是的,克里斯,你是对的,“su”不应该是必要的,但正如 Jared 所说,不可能使用 setReadable()
标签: android linux media-player chmod