Showing posts with label ACTION_OPEN_DOCUMENT. Show all posts
Showing posts with label ACTION_OPEN_DOCUMENT. Show all posts

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


This example show how to open video file of mp4 using Intent.ACTION_OPEN_DOCUMENT, ACTION_GET_CONTENT and ACTION_PICK, and play in VideoView, also add MediaController to the VideoView.



This example can also play videos stored in Google Drive:
(tested on XiaoMi RedMi 2 running Android 4.4.4)


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

import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.MediaController;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.VideoView;

public class MainActivity extends AppCompatActivity {

Button btnOpenDocument, btnGetContent, btnPick;
TextView info;
VideoView myVideoView;

Uri videoFileUri = null;

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

MediaController mediaController;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
info = (TextView) findViewById(R.id.info);
myVideoView = (VideoView)findViewById(R.id.vview);
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);

mediaController = new MediaController(MainActivity.this);
myVideoView.setMediaController(mediaController);

}

private void prepareVideo(){

Toast.makeText(MainActivity.this,
videoFileUri.toString(),
Toast.LENGTH_LONG).show();
myVideoView.setVideoURI(videoFileUri);

myVideoView.setOnCompletionListener(myVideoViewCompletionListener);
myVideoView.setOnPreparedListener(MyVideoViewPreparedListener);
myVideoView.setOnErrorListener(myVideoViewErrorListener);

myVideoView.requestFocus();
myVideoView.start();

}

MediaPlayer.OnCompletionListener myVideoViewCompletionListener =
new MediaPlayer.OnCompletionListener() {

@Override
public void onCompletion(MediaPlayer arg0) {
Toast.makeText(MainActivity.this, "End of Video",
Toast.LENGTH_LONG).show();
}
};

MediaPlayer.OnPreparedListener MyVideoViewPreparedListener =
new MediaPlayer.OnPreparedListener() {

@Override
public void onPrepared(MediaPlayer mp) {

long duration = myVideoView.getDuration(); //in millisecond
Toast.makeText(MainActivity.this,
"Duration: " + duration + " (ms)",
Toast.LENGTH_LONG).show();

}
};

MediaPlayer.OnErrorListener myVideoViewErrorListener =
new MediaPlayer.OnErrorListener() {

@Override
public boolean onError(MediaPlayer mp, int what, int extra) {

String errWhat = "";
switch (what){
case MediaPlayer.MEDIA_ERROR_UNKNOWN:
errWhat = "MEDIA_ERROR_UNKNOWN";
break;
case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
errWhat = "MEDIA_ERROR_SERVER_DIED";
break;
default: errWhat = "unknown what";
}

String errExtra = "";
switch (extra){
case MediaPlayer.MEDIA_ERROR_IO:
errExtra = "MEDIA_ERROR_IO";
break;
case MediaPlayer.MEDIA_ERROR_MALFORMED:
errExtra = "MEDIA_ERROR_MALFORMED";
break;
case MediaPlayer.MEDIA_ERROR_UNSUPPORTED:
errExtra = "MEDIA_ERROR_UNSUPPORTED";
break;
case MediaPlayer.MEDIA_ERROR_TIMED_OUT:
errExtra = "MEDIA_ERROR_TIMED_OUT";
break;
default:
errExtra = "...others";

}

Toast.makeText(MainActivity.this,
"Error!!!\n" +
"what: " + errWhat + "\n" +
"extra: " + errExtra,
Toast.LENGTH_LONG).show();
return true;
}
};

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("video/mp4");
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("video/mp4");
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.Video.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){

videoFileUri = data.getData();
info.setText(videoFileUri.toString());

prepareVideo();
}
}
}
}


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:padding="16dp"
android:orientation="vertical"
tools:context="com.blogspot.android_er.myopenmp4.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" />

<VideoView
android:id="@+id/vview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>


uses-permission of "android.permission.READ_EXTERNAL_STORAGE" is needed in AndroidManifest.xml.


download filesDownload the files .

Related:
- Open mp3 using Intent.ACTION_OPEN_DOCUMENT, ACTION_GET_CONTENT and ACTION_PICK, with checking and requesting permission at runtime.
- VideoView example to play video from Internet.



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.

Open images with Intent.ACTION_OPEN_DOCUMENT, Intent.ACTION_GET_CONTENT and Intent.ACTION_PICK


Example show how to select images by calling startActivityForResult() with Intent.ACTION_OPEN_DOCUMENT (Android 4.4, API level 19, and higher), Intent.ACTION_GET_CONTENT and Intent.ACTION_PICK, then load it using InputStream.

Tested on Nexus 7 running Android 5.1.1, to load photos from local and from cloud of Google Photos.

In my test:
- if select photos with Intent.ACTION_OPEN_DOCUMENT or Intent.ACTION_GET_CONTENT, both photos on local storage and on Google Photos cloud storage can be loaded using InputStream.
- if select photos with Intent.ACTION_PICK, cannot load from Google Photos cloud storage. (or may be by other method, I don't know).


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

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import java.io.FileNotFoundException;
import java.io.InputStream;

public class MainActivity extends AppCompatActivity {

Button btnOpen, btnGet, btnPick;
TextView textInfo1, textInfo2;
ImageView imageView;

private static final int RQS_OPEN_IMAGE = 1;
private static final int RQS_GET_IMAGE = 2;
private static final int RQS_PICK_IMAGE = 3;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnOpen = (Button)findViewById(R.id.open);
btnGet = (Button)findViewById(R.id.get);
btnPick = (Button)findViewById(R.id.pick);
textInfo1 = (TextView)findViewById(R.id.info1);
textInfo2 = (TextView)findViewById(R.id.info2);
imageView = (ImageView) findViewById(R.id.image);

btnOpen.setOnClickListener(btnOpenOnClickListener);
btnGet.setOnClickListener(btnGetOnClickListener);
btnPick.setOnClickListener(btnPickOnClickListener);
}

View.OnClickListener btnOpenOnClickListener = 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("image/*");

startActivityForResult(intent, RQS_OPEN_IMAGE);
}
};

View.OnClickListener btnGetOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");

startActivityForResult(intent, RQS_OPEN_IMAGE);
}
};

View.OnClickListener btnPickOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, RQS_PICK_IMAGE);
}
};

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {


if (requestCode == RQS_OPEN_IMAGE ||
requestCode == RQS_GET_IMAGE ||
requestCode == RQS_PICK_IMAGE) {

imageView.setImageBitmap(null);
textInfo1.setText("");
textInfo2.setText("");

Uri mediaUri = data.getData();
textInfo1.setText(mediaUri.toString());
String mediaPath = mediaUri.getPath();
textInfo2.setText(mediaPath);

//display the image
try {
InputStream inputStream = getBaseContext().getContentResolver().openInputStream(mediaUri);
Bitmap bm = BitmapFactory.decodeStream(inputStream);
imageView.setImageBitmap(bm);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
}
}


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:padding="16dp"
android:orientation="vertical"
tools:context="com.blogspot.android_er.androidloadphoto.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/open"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="OPEN Image"/>
<Button
android:id="@+id/get"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="GET Image"/>
<Button
android:id="@+id/pick"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="PICK Image"/>
<TextView
android:id="@+id/info1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="bold"/>
<TextView
android:id="@+id/info2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="italic"/>
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>