android - 我想播放 ListView 中选定的 mp3 文件

标签 android android-mediaplayer baseadapter

我只想播放列表中选定的mp3文件。获取onItemClick的位置,但 ListView 没有响应。

从 SDCard 获取 mp3 文件。 请帮我 提前致谢。

我的 fragment

ListView lv_recordersList;
 private ListViewAdapter adapter;
 ProgressDialog mProgressDialog;
 private List<String> myList;
 File file;


        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            // TODO Auto-generated method stub

            View v = inflater.inflate(R.layout.frag_recorders_list, null);
            lv_recordersList = (ListView) v.findViewById(R.id.lv_recordersList);

            myList = new ArrayList<String>();


            new DownloadJSON().execute();

        lv_recordersList.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // TODO Auto-generated method stub
             String value = lv_recordersList.getItemAtPosition(position).toString();

             System.out.println("####### Value OnItemClick : " +value);

             try {
             mMediaPlayer.setDataSource(value);
                mMediaPlayer.prepare();
                mMediaPlayer.start();
             } catch (IllegalArgumentException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (SecurityException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IllegalStateException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
        }
    });

            return v;
        }



    public class DownloadJSON extends AsyncTask<Void, Void, Void>{

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();

            mProgressDialog = new ProgressDialog(getActivity());
            //mProgressDialog.setTitle("PlugLeads");
            mProgressDialog.setMessage("Loading...");
            mProgressDialog.setIndeterminate(false);
            mProgressDialog.show();

        }


        @Override
        protected Void doInBackground(Void... params) {
            // TODO Auto-generated method stub

            File directory = Environment.getExternalStorageDirectory();
            file = new File(directory + "/Plugleads");
            File list[] = file.listFiles();

            for (int i = 0; i < list.length; i++) {
                // if(checkExtension( list[i].getName())
                if (checkExtension(list[i].getName())) {
                    myList.add(list[i].getName());
                }
            }


            return null;
        }




        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            //listview = (ListView) findViewById(R.id.listview);
            // Pass the results into ListViewAdapter.java
            adapter = new ListViewAdapter(getActivity(), myList);
            // Set the adapter to the ListView
            lv_recordersList.setAdapter(adapter);
            // Close the progressdialog
            mProgressDialog.dismiss();
        }



        private boolean checkExtension(String fileName) {
            String ext = getFileExtension(fileName);
            if (ext == null)
                return false;
            try {
                if (SupportedFileFormat.valueOf(ext.toUpperCase()) != null) {
                    return true;
                }
            } catch (IllegalArgumentException e) {
                return false;
            }
            return false;
        }

        public String getFileExtension(String fileName) {
            int i = fileName.lastIndexOf('.');
            if (i > 0) {
                return fileName.substring(i + 1);
            } else
                return null;
        }


    }

我的自定义 BaseAdapter getView() :

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub

    ImageView img_recorders_listitem;
    TextView tv_recorders_listitem;

    inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);


    View itemView = inflater.inflate(R.layout.frag_recorders_listitem, parent, false);

    img_recorders_listitem = (ImageView) itemView.findViewById(R.id.img_recorders_listitem);
    tv_recorders_listitem = (TextView) itemView.findViewById(R.id.tv_recorders_listitem);


    //resultp = data.get(position);
    System.out.println("$$$$$$$ ListP : " +myListp);

    pos = myListp.get(position);

    System.out.println("$$$$$$$ Pos : " +pos);


    tv_recorders_listitem.setText(pos);


    mMediaPlayer = new MediaPlayer();


    return itemView;
}

我的Logcat

06-09 13:05:54.787: I/System.out(16669): ####### Value OnItemClick : gshsh_07-06-2016_12_11_17.mp3
06-09 13:05:54.803: W/System.err(16669): java.io.IOException: setDataSource failed.
06-09 13:05:54.804: W/System.err(16669):    at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1086)
06-09 13:05:54.808: W/System.err(16669):    at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1032)
06-09 13:05:54.809: W/System.err(16669):    at com.plugleads.feedback.record.Frag_RecordersList$1.onItemClick(Frag_RecordersList.java:69)
06-09 13:05:54.809: W/System.err(16669):    at android.widget.AdapterView.performItemClick(AdapterView.java:305)
06-09 13:05:54.809: W/System.err(16669):    at android.widget.AbsListView.performItemClick(AbsListView.java:1146)
06-09 13:05:54.809: W/System.err(16669):    at android.widget.AbsListView$PerformClick.run(AbsListView.java:3053)
06-09 13:05:54.809: W/System.err(16669):    at android.widget.AbsListView$3.run(AbsListView.java:3860)
06-09 13:05:54.809: W/System.err(16669):    at android.os.Handler.handleCallback(Handler.java:739)
06-09 13:05:54.814: W/System.err(16669):    at android.os.Handler.dispatchMessage(Handler.java:95)
06-09 13:05:54.814: W/System.err(16669):    at android.os.Looper.loop(Looper.java:135)
06-09 13:05:54.814: W/System.err(16669):    at android.app.ActivityThread.main(ActivityThread.java:5343)
06-09 13:05:54.814: W/System.err(16669):    at java.lang.reflect.Method.invoke(Native Method)
06-09 13:05:54.814: W/System.err(16669):    at java.lang.reflect.Method.invoke(Method.java:372)
06-09 13:05:54.814: W/System.err(16669):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
06-09 13:05:54.814: W/System.err(16669):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)

请帮助我。提前致谢。

最佳答案

如日志所示:

IOException: setDataSource failed.

因为 gshsh_07-06-2016_12_11_17.mp3 不是 MediaPlayer 的有效文件路径。

使用完整路径,包括当前可用文件的目录名称。像:

File directory = Environment.getExternalStorageDirectory();
file = new File(directory + "/Plugleads/"+ value);
FileInputStream fileInputStream = new FileInputStream(file);
mMediaPlayer.setDataSource(fileInputStream.getFD()); 

关于android - 我想播放 ListView 中选定的 mp3 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37719303/

相关文章:

java - 如何从我的自定义基础适配器中删除项目?

android - 如何将边距设置为自动完成 TextView 适配器

android - PostDelayed 和 Handler 不工作并且没有延迟运行

android - NFC 空标签读取问题

java - 如何从 recyclerview newsapi 加载 url

android - MediaPlayerNative : error (1, -2147483648) 播放 HTTP 渐进式 MP3 流时

android - 为什么 MediaPlayer 中的声音无法播放?

java - android setVisible on textView 和 editText 不会立即生效

android - 搜索栏没有进展

android - 如何在 BaseAdapter 中使用 getFilter() 过滤 ListView