Open mp3 using Intent.ACTION_OPEN_DOCUMENT, ACTION_GET_CONTENT and ACTION_PICK, with checking and requesting permission at runtime.

Open mp3 using Intent.ACTION_OPEN_DOCUMENT, ACTION_GET_CONTENT and ACTION_PICK, with checking and requesting permission at runtime. - Hello Friend GENERAL INFO FOR ANDROID DEVELOPMENT, In the article you read this time with the title Open mp3 using Intent.ACTION_OPEN_DOCUMENT, ACTION_GET_CONTENT and ACTION_PICK, with checking and requesting permission at runtime., We have prepared this article for you to read and retrieve information there in. Hopefully the contents of postings Artikel ACTION_GET_CONTENT, Artikel ACTION_OPEN_DOCUMENT, Artikel Intent.ACTION_PICK, Artikel Permission, We write this you can understand. Alright, good read.

The Title : Open mp3 using Intent.ACTION_OPEN_DOCUMENT, ACTION_GET_CONTENT and ACTION_PICK, with checking and requesting permission at runtime.
link : Open mp3 using Intent.ACTION_OPEN_DOCUMENT, ACTION_GET_CONTENT and ACTION_PICK, with checking and requesting permission at runtime.

Read also


Open mp3 using Intent.ACTION_OPEN_DOCUMENT, ACTION_GET_CONTENT and ACTION_PICK, with checking and requesting permission at runtime.

Android example to open mp3 using Intent.ACTION_OPEN_DOCUMENT, ACTION_GET_CONTENT and ACTION_PICK, with checking and requesting permission at runtime.

This video show how it run on Android Emulator of Android 6.0, Marshmallo. It can be noticed that in case of ACTION_OPEN_DOCUMENT, the mp3 can be found but not openned; I don't know why currently! And if run on Android 6.0, have to check and request permission at runtime, otherwise the mp3 cannot be played.


MainActivity.java
package com.blogspot.android_er.androidplayer;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
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;

public class MainActivity extends AppCompatActivity {

TextView info, state;
Button btnOpenDocument, btnGetContent, btnPick;
Button buttonPlay, buttonPause, buttonStop;
SeekBar timeLine;
LinearLayout timeFrame;
TextView timePos, timeDur;

final static int RQS_OPEN_DOCUMENT = 1;
final static int RQS_GET_CONTENT = 2;
final static int RQS_PICK = 3;
final static int RQS_PERMISSION_READ_EXTERNAL_STORAGE = 4;

MediaPlayer mediaPlayer;
Uri audioFileUri = null;

enum MP_State {
Idle, Initialized, Prepared, Started, Paused,
Stopped, PlaybackCompleted, End, Error, Preparing
}

MP_State mediaPlayerState;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnOpenDocument = (Button)findViewById(R.id.opendocument);
btnGetContent = (Button)findViewById(R.id.getcontent);
btnPick = (Button)findViewById(R.id.pick);
btnOpenDocument.setOnClickListener(btnOpenDocumentOnClickListener);
btnGetContent.setOnClickListener(btnGetContentOnClickListener);
btnPick.setOnClickListener(btnPickOnClickListener);

info = (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(
new Runnable() {
@Override
public void run() {
monitorHandler.sendMessage(monitorHandler.obtainMessage());
}
},
200, //initialDelay
200, //delay
TimeUnit.MILLISECONDS);

}

Handler monitorHandler = new Handler() {

@Override
public void handleMessage(Message msg) {
mediaPlayerMonitor();
}

};

private 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
= new MediaPlayer.OnErrorListener() {

@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
// TODO Auto-generated method stub

mediaPlayerState = MP_State.Error;
showMediaPlayerState();

return false;
}
};


private void cmdReset() {
if (mediaPlayer == null) {
mediaPlayer = new MediaPlayer();
mediaPlayer.setOnErrorListener(mediaPlayerOnErrorListener);
}
mediaPlayer.reset();
mediaPlayerState = MP_State.Idle;
showMediaPlayerState();
}

private void cmdSetDataSource(Uri uri) {
if (mediaPlayerState == MP_State.Idle) {
try {
mediaPlayer.setDataSource(MainActivity.this, uri);
mediaPlayerState = MP_State.Initialized;
} catch (IllegalArgumentException e) {
Toast.makeText(MainActivity.this,
e.toString(), Toast.LENGTH_LONG).show();
e.printStackTrace();
} catch (IllegalStateException e) {
Toast.makeText(MainActivity.this,
e.toString(), Toast.LENGTH_LONG).show();
e.printStackTrace();
} catch (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 cmdPrepare() {

if (mediaPlayerState == MP_State.Initialized
|| mediaPlayerState == MP_State.Stopped) {
try {
mediaPlayer.prepare();
mediaPlayerState = MP_State.Prepared;
} catch (IllegalStateException e) {
Toast.makeText(MainActivity.this,
e.toString(), Toast.LENGTH_LONG).show();
e.printStackTrace();
} catch (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();
}

private 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();
}

private 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();
}

private 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();

}

private void showMediaPlayerState() {

switch (mediaPlayerState) {
case Idle:
state.setText("Idle");
break;
case Initialized:
state.setText("Initialized");
break;
case Prepared:
state.setText("Prepared");
break;
case Started:
state.setText("Started");
break;
case Paused:
state.setText("Paused");
break;
case Stopped:
state.setText("Stopped");
break;
case PlaybackCompleted:
state.setText("PlaybackCompleted");
break;
case End:
state.setText("End");
break;
case Error:
state.setText("Error");
break;
case Preparing:
state.setText("Preparing");
break;
default:
state.setText("Unknown!");
}
}

View.OnClickListener buttonPlayOnClickListener
= new View.OnClickListener() {

@Override
public void onClick(View v) {

if (audioFileUri == null) {
Toast.makeText(MainActivity.this,
"No file selected",
Toast.LENGTH_LONG).show();
} else {
cmdPrepare();
cmdStart();
}

}

};

View.OnClickListener buttonPauseOnClickListener
= new View.OnClickListener() {

@Override
public void onClick(View v) {
cmdPause();
}

};

View.OnClickListener buttonStopOnClickListener
= new View.OnClickListener() {

@Override
public void onClick(View v) {

cmdStop();

}

};

View.OnClickListener btnOpenDocumentOnClickListener = new View.OnClickListener(){

@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("audio/mp3");
startActivityForResult(
Intent.createChooser(intent, "ACTION_OPEN_DOCUMENT"),
RQS_OPEN_DOCUMENT);
}
};

View.OnClickListener btnGetContentOnClickListener = new View.OnClickListener(){

@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setType("audio/mp3");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(
intent, "ACTION_GET_CONTENT"), RQS_GET_CONTENT);
}
};

View.OnClickListener btnPickOnClickListener = new View.OnClickListener(){

@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(
Intent.createChooser(intent, "ACTION_PICK"),
RQS_PICK);
}
};

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if(requestCode == RQS_OPEN_DOCUMENT
|| requestCode == RQS_GET_CONTENT
|| requestCode == RQS_PICK){
audioFileUri = data.getData();

info.setText(audioFileUri.toString());

//Check and request Permission at runtime
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {

ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
RQS_PERMISSION_READ_EXTERNAL_STORAGE);

return;
}

cmdReset();
cmdSetDataSource(audioFileUri);
}
}
}

@Override
public void onRequestPermissionsResult(
int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case RQS_PERMISSION_READ_EXTERNAL_STORAGE: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(MainActivity.this,
"permission was granted, :)",
Toast.LENGTH_LONG).show();

cmdReset();
cmdSetDataSource(audioFileUri);
} else {
Toast.makeText(MainActivity.this,
"permission denied, ...:(",
Toast.LENGTH_LONG).show();
}
return;
}
}
}
}


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="http://android-er.blogspot.com/"
android:textStyle="bold" />

<Button
android:id="@+id/opendocument"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="ACTION_OPEN_DOCUMENT" />

<Button
android:id="@+id/getcontent"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="ACTION_GET_CONTENT" />

<Button
android:id="@+id/pick"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="ACTION_PICK" />

<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 in AndroidManifest.xml.


download filesDownload the files .

Related:
Open mp4 using Intent.ACTION_OPEN_DOCUMENT, ACTION_GET_CONTENT and ACTION_PICK, and play in VideoView.



Thus Article Open mp3 using Intent.ACTION_OPEN_DOCUMENT, ACTION_GET_CONTENT and ACTION_PICK, with checking and requesting permission at runtime.

The End Article Open mp3 using Intent.ACTION_OPEN_DOCUMENT, ACTION_GET_CONTENT and ACTION_PICK, with checking and requesting permission at runtime. This time, hopefully can give benefits to all of you. well, see you in posting other articles.

You are now reading the article Open mp3 using Intent.ACTION_OPEN_DOCUMENT, ACTION_GET_CONTENT and ACTION_PICK, with checking and requesting permission at runtime. with the link address http://xorislogo.blogspot.com/2016/05/open-mp3-using-intentactionopendocument.html

0 Response to "Open mp3 using Intent.ACTION_OPEN_DOCUMENT, ACTION_GET_CONTENT and ACTION_PICK, with checking and requesting permission at runtime."

Post a Comment