android - 如何从 ListView 播放录制的音频文件

标签 android android-listview media-player audio-recording

我正在开发一个通话录音应用程序。它记录通话并将其保存在手机内存(文件管理器)中,保存音频文件后,我设法在 ListView 中显示录制的文件。知道当我单击列表上的文件进行播放时,它会出现准备失败错误。我正在发布代码。

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    listView = (ListView) findViewById(R.id.mylist);
            mp = new MediaPlayer();
    // this will show the recorded files into ListVIew
    myList = new ArrayList<String>();
    files = new File(Environment.getExternalStorageDirectory()
            + "/Audio File/");
    File list[] = files.listFiles();
    for (int i = 0; i < list.length; i++) {
        myList.add(list[i].getName());
    }

    adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, myList);
    listView.setAdapter(adapter);

    listView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

            try {
                playSong(files + myList.get(position));
            } catch (Exception e) {
                Log.d("PlaySong", "Error in Playing song "+e.toString());
            }

            // just for checking the position of item in list
            Object listItem = listView.getItemAtPosition(position);
            Toast.makeText(MainActivity.this, "" + listItem,
                    Toast.LENGTH_SHORT).show();
        }

        private void playSong(String string) throws IllegalArgumentException, SecurityException, IllegalStateException, IOException {

            mp.reset();
            mp.setDataSource(string);
            mp.prepare();
            mp.start();
        }

    });
}

错误是

  03-07 14:40:25.866: I/SurfaceTextureClient(15355): [STC::queueBuffer] this:0x4f11d050,             api:1, last queue time elapsed :11282 ms
  03-07 14:40:25.866: I/SurfaceTextureClient(15355): [0x4f11d050] frames:2, duration:11.356000, fps:0.176113
  03-07 14:40:25.916: V/Provider/Setting(15355): from settings cache , name = sound_effects_enabled value = 0
  03-07 14:40:25.918: D/MediaPlayer(15355): mPlayerID = 48
  03-07 14:40:25.927: E/MediaPlayer(15355): error (1, -2147483648)
  03-07 14:40:25.927: D/PlaySong(15355): Error in Playing song java.io.IOException: Prepare failed.: status=0x1

最佳答案

我只建议您在上一个问题中编写此代码,因此下面可能是导致问题的主要问题。

尝试声明您的

files = new File(Environment.getExternalStorageDirectory()+ "/Audio File/");

作为

private static final String files = new String(
            Environment.getExternalStorageDirectory() + "/Audio File/");

您已将路径声明为文件,因此请使用字符串更改它,然后尝试。

关于android - 如何从 ListView 播放录制的音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22246592/

相关文章:

java - 在 ListView 中显示 SQLite

java - 如何在 Android 中播放从 Assets 文件夹加载的 WAV 文件?

android - 是否可以使用 Code::Blocks 作为移动应用程序开发的 IDE?

android - 根据选项卡更改文本可见性并设置选项卡的背景颜色

android - listview recyclerview 问题?

ios - 如何在 iPhone 中播放 Youtube 视频

android - Android Nexus Lollipop Mediaplayer正在不断寻求媒体播放

android - GPS 定位始终返回零速度

android - AsyncTask 访问数据库 - 在哪里初始化,关闭?

android - 当你在 android ListView 中滑动任何列表项时想要调用