【问题标题】:How to play song which is fetched from internal storage如何播放从内部存储中获取的歌曲
【发布时间】:2020-05-28 16:13:14
【问题描述】:

我从手机的内部存储中提取了音乐,它显示完美,但我不知道如何播放这些歌曲。这是我的代码,请告诉我怎么玩。我没有得到播放歌曲必须传递的 URI。

帮我解决这个问题。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    view=  inflater.inflate(R.layout.fragment_music, container, false);
    if(ContextCompat.checkSelfPermission(getContext(), Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
        if(ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE)){
            ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSTION_REQUEST);

        } else {
            ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSTION_REQUEST);
        }
    } else {
        doStuff();
    }

    return view;
}
public void doStuff(){
    ListView listView = view.findViewById(R.id.musicrecyclerview);
    musicModes = new ArrayList<>();
    getMusic();
    ArrayAdapter adapter = new ArrayAdapter(getContext(), android.R.layout.simple_list_item_1, musicModes);
    listView.setAdapter(adapter);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent intent =new Intent();
            intent.setAction(Intent.ACTION_VIEW);

        }
    });
}
public void getMusic(){
    ContentResolver contentResolver = getActivity().getApplicationContext().getContentResolver();
    Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    Cursor mycursor = contentResolver.query(uri, null, null, null, null);
    if(mycursor != null && mycursor.moveToFirst()){
        songtitle = mycursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
        songsize = mycursor.getColumnIndex(MediaStore.Audio.Media.DATA);
        column_index = mycursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
        do{
            currenttitle = mycursor.getString(songtitle);
            currentsize = mycursor.getString(songsize);
            musicModes.add(currenttitle+ "\n"+ currentsize);
        } while(mycursor.moveToNext());
    }
}

【问题讨论】:

标签: java android android-studio


【解决方案1】:

请试试这个:

int dataIndex= mycursor.getColumnIndex(MediaStore.Audio.Media.DATA);
String data =  mycursor.getString(dataIndex)
Uri uri= Uri.parse("file:///" + data);

MediaPlayer player= new MediaPlayer();
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setDataSource(getApplicationContext(), uri);
player.prepare();
player.start();

【讨论】:

  • 试过这个,但是在解析时出错:Uri 中的 parse(String) 不能应用于 (String, int)
  • 我更新了代码。我忘了从光标中提取实际数据。
  • 好的,但它仍然给出错误,它不接受两个参数。
  • 在我的代码中,我只向 Uri.parse() 传递了一个参数,它是由“file:///”和数据连接创建的字符串
  • 但是我的问题还是没有解决,这音乐怎么播放?
猜你喜欢
  • 1970-01-01
  • 2017-09-09
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多