我正在开发一个应用程序,它应该在从API 8到最新的设备上运行。
其实我正在与Mediaplayer打交道。代码在片段中,只是:
MediaPlayer mediaPlayer = null;
if (mediaPlayer = MediaPlayer.create(getActivity(), myAudioFileUri) != null) {
. . .
}
此代码完全适用于Android 4.4.2,MediaPlayer.create()返回一个有效值,我可以毫无问题地使用Mediaplayer。
不幸的是,MediaPlayer.create()在Android 2.3.7上返回null。 这是我的问题,我没有在互联网上找到导致问题的原因,这个Android版本在使用它方面也没有区别。
两个测试都在GenyMotion模拟器上完成,因为我没有这么老的Android设备。
编辑: 所以我使用shell adb验证了问题真的来自mp3文件权限,如果我" chmod 777 myfile.mp3"我可以成功阅读它。
我现在的问题是知道如何更改Android 2.3上的权限
用于从我的远程服务器下载文件以在本地复制它的代码是下一个:
private Uri downloadFileFromURL(URL url, String fileName) {
try {
URLConnection conn = url.openConnection();
HttpURLConnection httpConnection = conn instanceof HttpURLConnection ? (HttpURLConnection ) conn : null;
int responseCode = httpConnection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK){
int len, length = 0;
byte[] buf = new byte[8192];
InputStream is = httpConnection.getInputStream();
File file = new File(getActivity().getApplicationContext().getFilesDir().getParentFile().getPath(), fileName);
OutputStream os = new FileOutputStream(file);
try {
while((len = is.read(buf, 0, buf.length)) > 0) {
os.write(buf, 0, len);
length += len;
}
os.flush();
}
finally {
is.close();
os.close();
}
String chmodString = "chmod 777 " + getActivity().getApplicationContext().getFilesDir().getParentFile().getPath() +"/" + fileName;
Process sh = Runtime.getRuntime().exec("su", null, new File("/system/bin/"));
OutputStream osChgPerms = sh.getOutputStream();
osChgPerms.write((chmodString).getBytes("ASCII"));
osChgPerms.flush();
osChgPerms.close();
try {
sh.waitFor();
} catch (InterruptedException e) {
Log.d("2ndGuide", "InterruptedException." + e);
}
return Uri.fromFile(file);
}
}
catch(IOException e)
{
Log.d("2ndGuide", "IO Exception." + e);
}
return null;
}
但osChgPerms.write((chmodString).getBytes(" ASCII"));生成IOException:损坏的管道。 我想我并不了解如何执行命令。
出了什么问题? 的问候,
答案 0 :(得分:0)
我可以为您指出两个可能的原因,不确定它们是否可以解决您的问题。
Android只能分配一定数量的MediaPlayer对象,您需要使用mediaPlayer.release()
释放任何MediaPlayer对象。
Android仅支持8位和16位线性PCM,因此请检查音频 文件。更多:Supported Media Formats
答案 1 :(得分:0)
事实上,问题显然来自于媒体文件必须是可读的,每个人都可以被媒体播放器阅读。 此行为仅发生在HONEYCOMB前设备上。