MediaPlayer.create()在Android 2.3.7上返回null

时间:2014-07-16 20:09:21

标签: android android-mediaplayer

我正在开发一个应用程序,它应该在从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:损坏的管道。 我想我并不了解如何执行命令。

出了什么问题? 的问候,

2 个答案:

答案 0 :(得分:0)

我可以为您指出两个可能的原因,不确定它们是否可以解决您的问题。

  • Android只能分配一定数量的MediaPlayer对象,您需要使用mediaPlayer.release()释放任何MediaPlayer对象。

  • Android仅支持8位和16位线性PCM,因此请检查音频 文件。更多:Supported Media Formats

答案 1 :(得分:0)

事实上,问题显然来自于媒体文件必须是可读的,每个人都可以被媒体播放器阅读。 此行为仅发生在HONEYCOMB前设备上。