Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to play music by its uri

I am trying to retrieve the music data saving the data into an array list and converting the data string into uri and using it to play the music but the app crash when ever I click. list view item it will play the music by its uri here is my code `

public class Mediafileinfo {
private String title;
private String artist;
private String data;
public String getData() {
    return data;
}

public void setData(String data) {
    this.data = data;
}
}

` this is the class where i am saving my media data and i am trying to play like this where i am doing wrong

 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            Mediafileinfo item = new Mediafileinfo();
            Uri myUri = Uri.parse(item.getData());
            mediaPlayer = new MediaPlayer();
            try {
                mediaPlayer.setDataSource(String.valueOf(myUri));
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                mediaPlayer.prepare();
            } catch (IOException e) {
                e.printStackTrace();
            }
            mediaPlayer.start();
        }
    });

my main activity class were i am getting the data

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    External();
    ListView listView = (ListView) findViewById(R.id.listView);
    ArrayAdapter arrayAdapter = new CustomeAdapter(this, audioList);
    listView.setAdapter(arrayAdapter);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            Mediafileinfo item = new Mediafileinfo();
            Uri myUri = Uri.parse(item.getData());

            mediaPlayer = new MediaPlayer();

            mediaPlayer.reset();
            try {
                mediaPlayer.setDataSource(MainActivity.this,myUri);
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                mediaPlayer.prepare();
            } catch (IOException e) {
                e.printStackTrace();
            }
            mediaPlayer.start();

        }
    });
}

private void External() {
    try {
        String[] proj = {MediaStore.Audio.Media._ID,
                MediaStore.Audio.Media.TITLE,
                MediaStore.Audio.Media.ARTIST,
                MediaStore.Audio.Media.DURATION,
        MediaStore.Audio.Media.DATA};// Can include more data for more details and check it.

        String selection = MediaStore.Audio.Media.DURATION + ">=90000";

        String[] selectionArgs = null;

        String sortOrder = MediaStore.Audio.Media.TITLE + " ASC";

        Cursor audioCursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, proj, selection, selectionArgs, sortOrder);

        if (audioCursor != null) {
            if (audioCursor.moveToFirst()) {
                do {
                    int audioTitle = audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE);
                    int audioartist = audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST);
                    int audioalbum = audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION);
                    int audiodata= audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
                    Mediafileinfo info = new Mediafileinfo();
                    info.setData(audioCursor.getString(audiodata));
                    info.setTitle(audioCursor.getString(audioTitle));
                    info.setAlbum(audioCursor.getLong(audioalbum));
                    info.setArtist(audioCursor.getString(audioartist));
                    audioList.add(info);
                } while (audioCursor.moveToNext());
            }
        }
        audioCursor.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
}

my custome adapter

public class CustomeAdapter extends ArrayAdapter {
public CustomeAdapter(Context context, ArrayList<Mediafileinfo> audioList) {
    super(context,R.layout.custome,audioList);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflate=LayoutInflater.from(getContext());
    View v=inflate.inflate(R.layout.custome,parent,false);
    Mediafileinfo item = (Mediafileinfo) getItem(position);
    TextView text1 = (TextView) v.findViewById(R.id.textView);
    text1.setText(item.getData());
    TextView text2 = (TextView) v.findViewById(R.id.textView2);
    text2.setText(item.getArtist());
    TextView text3=(TextView)v.findViewById(R.id.textView3);
    text3.setText(String.format("%02d:%02d",
            TimeUnit.MILLISECONDS.toMinutes(item.getAlbum()),
            TimeUnit.MILLISECONDS.toSeconds(item.getAlbum()) -
                    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(item.getAlbum()))));

    return v;
}
}

In this way i am getting the data and how i can play it when item clicked

like image 243
SAVVY Avatar asked Aug 02 '16 04:08

SAVVY


People also ask

How do I play music on Android?

On your Android phone or tablet, say "Hey Google, open Assistant settings." Or, go to Assistant settings. Tap Music. Choose a music service.


1 Answers

Use this mediaPlayer.setDataSource(MainActivity.this,myUri); instead of mediaPlayer.setDataSource(String.valueOf(myUri));

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            //Mediafileinfo item = new Mediafileinfo();
            Mediafileinfo item = audioList.get(i);
            Uri myUri = Uri.parse(item.getData());
            mediaPlayer = new MediaPlayer();
            try {
               // mediaPlayer.setDataSource(String.valueOf(myUri));
               mediaPlayer.setDataSource(MainActivity.this,myUri);
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                mediaPlayer.prepare();
            } catch (IOException e) {
                e.printStackTrace();
            }
            mediaPlayer.start();
        }
    });
like image 73
Sohail Zahid Avatar answered Nov 14 '22 23:11

Sohail Zahid