Intent.Action_Get_Content To Opened Upward Mp3, Play Using Mediaplayer, Tested On Android 5.1 Lollipop

Posted on

Refer to my sometime practise of MediaPlayer “Display playing fourth dimension for MediaPlayer“, opened upward mp3 using Intent of “ACTION_GET_CONTENT”, as well as thus transcend the media path, data.getData().getPath(), to mediaPlayer.setDataSource(). But it non endure now.

To create it, alter to pass data.getData() to mediaPlayer.setDataSource().

Tested on Android emulator running 5.5 Lollipop:


MainActivity.java

package com.blogspot.android_er.androidplayer;  import android.content.Intent; import android.media.MediaPlayer; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; import android.widget.SeekBar; import android.widget.TextView; import android.widget.Toast;  import java.io.IOException; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit;  world course of pedagogy MainActivity extends AppCompatActivity {      TextView info, state;     Button buttonOpen, buttonOpenNew;     Button buttonPlay, buttonPause, buttonStop;     SeekBar timeLine;     LinearLayout timeFrame;     TextView timePos, timeDur;      concluding static int RQS_OPEN_AUDIO_MP3 = 1;     concluding static int RQS_OPEN_AUDIO_MP3_NEW = 2;      MediaPlayer mediaPlayer;     String srcPath = null;      enum MP_State {         Idle, Initialized, Prepared, Started, Paused,         Stopped, PlaybackCompleted, End, Error, Preparing     }      MP_State mediaPlayerState;      //ScheduledExecutorService myScheduledExecutorService;      /**      * Called when the activeness is offset created.      */     @Override     world void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         buttonOpen = (Button) findViewById(R.id.open);         buttonOpen.setOnClickListener(buttonOpenOnClickListener);         buttonOpenNew = (Button) findViewById(R.id.opennew);         buttonOpenNew.setOnClickListener(buttonOpenNewOnClickListener);          information = (TextView) findViewById(R.id.info);         state = (TextView) findViewById(R.id.state);          buttonPlay = (Button) findViewById(R.id.play);         buttonPlay.setOnClickListener(buttonPlayOnClickListener);         buttonPause = (Button) findViewById(R.id.pause);         buttonPause.setOnClickListener(buttonPauseOnClickListener);         buttonStop = (Button) findViewById(R.id.stop);         buttonStop.setOnClickListener(buttonStopOnClickListener);          //         timeLine = (SeekBar) findViewById(R.id.seekbartimeline);         timeFrame = (LinearLayout) findViewById(R.id.timeframe);         timePos = (TextView) findViewById(R.id.pos);         timeDur = (TextView) findViewById(R.id.dur);          ScheduledExecutorService myScheduledExecutorService                 = Executors.newScheduledThreadPool(1);          myScheduledExecutorService.scheduleWithFixedDelay(                 novel Runnable() {                     @Override                     world void run() {                         monitorHandler.sendMessage(monitorHandler.obtainMessage());                     }                 },                 200, //initialDelay                 200, //delay                 TimeUnit.MILLISECONDS);      }      Handler monitorHandler = novel Handler() {          @Override         world void handleMessage(Message msg) {             mediaPlayerMonitor();         }      };      mortal void mediaPlayerMonitor() {         if (mediaPlayer == null) {             timeLine.setVisibility(View.INVISIBLE);             timeFrame.setVisibility(View.INVISIBLE);         } else {             if (mediaPlayer.isPlaying()) {                 timeLine.setVisibility(View.VISIBLE);                 timeFrame.setVisibility(View.VISIBLE);                  int mediaDuration = mediaPlayer.getDuration();                 int mediaPosition = mediaPlayer.getCurrentPosition();                 timeLine.setMax(mediaDuration);                 timeLine.setProgress(mediaPosition);                 timePos.setText(String.valueOf((float) mediaPosition / 1000) + "s");                 timeDur.setText(String.valueOf((float) mediaDuration / 1000) + "s");             } else {                 timeLine.setVisibility(View.INVISIBLE);                 timeFrame.setVisibility(View.INVISIBLE);             }         }     }      MediaPlayer.OnErrorListener mediaPlayerOnErrorListener             = novel MediaPlayer.OnErrorListener() {          @Override         world boolean onError(MediaPlayer mp, int what, int extra) {             // TODO Auto-generated method stub              mediaPlayerState = MP_State.Error;             showMediaPlayerState();              provide false;         }     };       mortal void cmdReset() {         if (mediaPlayer == null) {             mediaPlayer = novel MediaPlayer();             mediaPlayer.setOnErrorListener(mediaPlayerOnErrorListener);         }         mediaPlayer.reset();         mediaPlayerState = MP_State.Idle;         showMediaPlayerState();     }      private void cmdSetDataSource(Uri uri) {         if (mediaPlayerState == MP_State.Idle) {             attempt {                 mediaPlayer.setDataSource(MainActivity.this, uri);                 mediaPlayerState = MP_State.Initialized;             } grab (IllegalArgumentException e) {                 Toast.makeText(MainActivity.this,                         e.toString(), Toast.LENGTH_LONG).show();                 e.printStackTrace();             } grab (IllegalStateException e) {                 Toast.makeText(MainActivity.this,                         e.toString(), Toast.LENGTH_LONG).show();                 e.printStackTrace();             } grab (IOException e) {                 Toast.makeText(MainActivity.this,                         e.toString(), Toast.LENGTH_LONG).show();                 e.printStackTrace();             }         } else {             Toast.makeText(MainActivity.this,                     "Invalid State@cmdSetDataSource - skip",                     Toast.LENGTH_LONG).show();         }          showMediaPlayerState();     }      private void cmdSetDataSource(String path) {         if (mediaPlayerState == MP_State.Idle) {             attempt {                 mediaPlayer.setDataSource(path);                 mediaPlayerState = MP_State.Initialized;             } grab (IllegalArgumentException e) {                 Toast.makeText(MainActivity.this,                         e.toString(), Toast.LENGTH_LONG).show();                 e.printStackTrace();             } grab (IllegalStateException e) {                 Toast.makeText(MainActivity.this,                         e.toString(), Toast.LENGTH_LONG).show();                 e.printStackTrace();             } grab (IOException e) {                 Toast.makeText(MainActivity.this,                         e.toString(), Toast.LENGTH_LONG).show();                 e.printStackTrace();             }         } else {             Toast.makeText(MainActivity.this,                     "Invalid State@cmdSetDataSource - skip",                     Toast.LENGTH_LONG).show();         }          showMediaPlayerState();     }      mortal void cmdPrepare() {          if (mediaPlayerState == MP_State.Initialized                 || mediaPlayerState == MP_State.Stopped) {             attempt {                 mediaPlayer.prepare();                 mediaPlayerState = MP_State.Prepared;             } grab (IllegalStateException e) {                 Toast.makeText(MainActivity.this,                         e.toString(), Toast.LENGTH_LONG).show();                 e.printStackTrace();             } grab (IOException e) {                 Toast.makeText(MainActivity.this,                         e.toString(), Toast.LENGTH_LONG).show();                 e.printStackTrace();             }         } else {             Toast.makeText(MainActivity.this,                     "Invalid State@cmdPrepare() - skip",                     Toast.LENGTH_LONG).show();         }          showMediaPlayerState();     }      mortal void cmdStart() {         if (mediaPlayerState == MP_State.Prepared                 || mediaPlayerState == MP_State.Started                 || mediaPlayerState == MP_State.Paused                 || mediaPlayerState == MP_State.PlaybackCompleted) {             mediaPlayer.start();             mediaPlayerState = MP_State.Started;         } else {             Toast.makeText(MainActivity.this,                     "Invalid State@cmdStart() - skip",                     Toast.LENGTH_LONG).show();         }          showMediaPlayerState();     }      mortal void cmdPause() {         if (mediaPlayerState == MP_State.Started                 || mediaPlayerState == MP_State.Paused) {             mediaPlayer.pause();             mediaPlayerState = MP_State.Paused;         } else {             Toast.makeText(MainActivity.this,                     "Invalid State@cmdPause() - skip",                     Toast.LENGTH_LONG).show();         }         showMediaPlayerState();     }      mortal void cmdStop() {          if (mediaPlayerState == MP_State.Prepared                 || mediaPlayerState == MP_State.Started                 || mediaPlayerState == MP_State.Stopped                 || mediaPlayerState == MP_State.Paused                 || mediaPlayerState == MP_State.PlaybackCompleted) {             mediaPlayer.stop();             mediaPlayerState = MP_State.Stopped;         } else {             Toast.makeText(MainActivity.this,                     "Invalid State@cmdStop() - skip",                     Toast.LENGTH_LONG).show();         }         showMediaPlayerState();      }      mortal void showMediaPlayerState() {          switch (mediaPlayerState) {             instance Idle:                 state.setText("Idle");                 break;             instance Initialized:                 state.setText("Initialized");                 break;             instance Prepared:                 state.setText("Prepared");                 break;             instance Started:                 state.setText("Started");                 break;             instance Paused:                 state.setText("Paused");                 break;             instance Stopped:                 state.setText("Stopped");                 break;             instance PlaybackCompleted:                 state.setText("PlaybackCompleted");                 break;             instance End:                 state.setText("End");                 break;             instance Error:                 state.setText("Error");                 break;             instance Preparing:                 state.setText("Preparing");                 break;             default:                 state.setText("Unknown!");         }     }      View.OnClickListener buttonPlayOnClickListener             = novel View.OnClickListener() {          @Override         world void onClick(View v) {              if (srcPath == null) {                 Toast.makeText(MainActivity.this,                         "No file selected",                         Toast.LENGTH_LONG).show();             } else {                 cmdPrepare();                 cmdStart();             }          }      };      View.OnClickListener buttonPauseOnClickListener             = novel View.OnClickListener() {          @Override         world void onClick(View v) {             cmdPause();         }      };      View.OnClickListener buttonStopOnClickListener             = novel View.OnClickListener() {          @Override         world void onClick(View v) {              cmdStop();          }      };      View.OnClickListener buttonOpenOnClickListener             = novel View.OnClickListener() {          @Override         world void onClick(View arg0) {             Intent intent = novel Intent();             intent.setType("audio/mp3");             intent.setAction(Intent.ACTION_GET_CONTENT);             startActivityForResult(Intent.createChooser(                     intent, "Open Audio (mp3) file"), RQS_OPEN_AUDIO_MP3);          }     };      View.OnClickListener buttonOpenNewOnClickListener             = novel View.OnClickListener() {          @Override         world void onClick(View arg0) {             Intent intent = novel Intent();             intent.setType("audio/mp3");             intent.setAction(Intent.ACTION_GET_CONTENT);             startActivityForResult(Intent.createChooser(                     intent, "Open Audio (mp3) file"), RQS_OPEN_AUDIO_MP3_NEW);          }     };      @Override     protected void onActivityResult(int requestCode, int resultCode, Intent data) {         if (resultCode == RESULT_OK) {             if (requestCode == RQS_OPEN_AUDIO_MP3) { //work on my sometime post at that time, only non endure now!!! //                  Uri audioFileUri = data.getData();                  srcPath = audioFileUri.getPath();                 info.setText(audioFileUri.toString() + "\n" + srcPath);                  cmdReset();                 cmdSetDataSource(srcPath);              }else if(requestCode == RQS_OPEN_AUDIO_MP3_NEW){                 //New version,                 Uri audioFileUri = data.getData();                  srcPath = audioFileUri.getPath();                 info.setText(audioFileUri.toString() + "\n" + srcPath);                  cmdReset();                 cmdSetDataSource(audioFileUri);             }         }     } }  

layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:orientation="vertical"     android:padding="16dp"     tools:context="com.blogspot.android_er.androidplayer.MainActivity">      <TextView         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_gravity="center_horizontal"         android:autoLink="web"         android:text="https://rootandroid.org//"         android:textStyle="bold" />      <Button         android:id="@+id/open"         android:layout_width="fill_parent"         android:layout_height="wrap_content"         android:text="Open MP3 file" />      <Button         android:id="@+id/opennew"         android:layout_width="fill_parent"         android:layout_height="wrap_content"         android:text="Open MP3 file (NEW)" />      <TextView         android:id="@+id/info"         android:layout_width="fill_parent"         android:layout_height="wrap_content" />      <Button         android:id="@+id/play"         android:layout_width="fill_parent"         android:layout_height="wrap_content"         android:text="Play" />      <Button         android:id="@+id/pause"         android:layout_width="fill_parent"         android:layout_height="wrap_content"         android:text="Pause" />      <Button         android:id="@+id/stop"         android:layout_width="fill_parent"         android:layout_height="wrap_content"         android:text="Stop" />      <TextView         android:id="@+id/state"         android:layout_width="fill_parent"         android:layout_height="wrap_content" />      <SeekBar         android:id="@+id/seekbartimeline"         android:layout_width="fill_parent"         android:layout_height="wrap_content"         android:visibility="invisible" />      <LinearLayout         android:id="@+id/timeframe"         android:layout_width="fill_parent"         android:layout_height="wrap_content"         android:orientation="horizontal"         android:visibility="invisible">          <TextView             android:id="@+id/pos"             android:layout_width="wrap_content"             android:layout_height="wrap_content" />          <TextView             android:id="@+id/dur"             android:layout_width="match_parent"             android:layout_height="wrap_content"             android:gravity="right" />     </LinearLayout>  </LinearLayout>  

uses-permission of “android.permission.READ_EXTERNAL_STORAGE” is needed inward AndroidManifest.xml

 Refer to my sometime practise of MediaPlayer  Intent.ACTION_GET_CONTENT to opened upward mp3, play using MediaPlayer, tested on Android 5.1 LollipopDownload the files .

Related:
– Open mp3 using Intent.ACTION_OPEN_DOCUMENT, ACTION_GET_CONTENT as well as ACTION_PICK, amongst checking as well as requesting permission at runtime.