有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java MediaPlayer无法处理本地文件

我正在尝试播放来自listview的音频。我已经把所有的音频文件都放进了listView。在listviewitemClick活动上,将播放这首歌

当我使用这个时,问题出现了:

MediaPlayer mp= new MediaPlayer.create(this,myFile);
mp.start();

这将首次奏效。当我点击listView上的第二首歌时,第一首歌继续播放

我知道Create()将创建另一个MediaPlayer实例。我已经声明它是静态的,但它仍在创建其他实例,或者我不知道它在做什么

我试过使用mp.setDataSource(context,myUri);,但这会导致reset()stop()上出现错误

这是我的密码。谁能告诉我我做错了什么

public static class FirstFragment extends Fragment {

    View myView;
    private String[] theNamesOfFiles;
    Intent i = new Intent();
    public static MediaPlayer mp = new MediaPlayer();


    @Nullable
    @Override
    public View onCreateView(final LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {

        myView = inflater.inflate(R.layout.first_layout, container, false);

        final File dir = new File(Environment.getExternalStorageDirectory() + File.separator + "Ringtones");
        File[] filelist = dir.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return !pathname.isHidden();
            }
        });
        theNamesOfFiles = new String[filelist.length];
        for (int i = 0; i < theNamesOfFiles.length; i++) {
            theNamesOfFiles[i] = filelist[i].getName();

        }

        ListView listview = (ListView) myView.findViewById(R.id.RecordingList);
        ArrayAdapter<String> listviewAdapter = new ArrayAdapter<String>(
                getActivity(), 安卓.R.layout.simple_list_item_1, theNamesOfFiles
        );
        listview.setAdapter(listviewAdapter);
        listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                Uri myUri=  Uri.parse(dir+"/"+theNamesOfFiles[position]);
                mp.create(getActivity().getBaseContext(),myUri);
                if(mp.isPlaying())
                {
                    mp.stop();
                    mp.reset();
                    mp.release();
                }
                mp.start();
            }

        });

        return myView;
    }


}

Logcat显示出跟随

E/MediaPlayer: start called in state 1

E/MediaPlayer: error (-38, 0)

E/MediaPlayer: Should have subtitle controller already set

E/MediaPlayer: Error (-38,0)


共 (0) 个答案