[解決済み】Android内蔵のギャラリーアプリからプログラムで画像を取得/選択する方法
2022-04-03 23:44:05
質問
アプリケーションの内部からギャラリー内蔵アプリの画像/映像を開こうとしています。
写真のURIを持っています(写真はSDカードにあります)。
何かご提案がありますか?
解決方法は?
これは完全な解決策です。このサンプルコードに、@mad さんの以下の回答で提供された情報を加えて更新したところです。また、@Khobaib による picasa 画像を扱う方法を説明した以下の解決策もご覧ください。
更新情報
私はちょうど私の元の答えを見直し、あなたがgithubからチェックアウトし、あなたのシステム上で直接インポートすることができますシンプルなAndroid Studioのプロジェクトを作成しました。
https://github.com/hanscappelle/SO-2169649
(複数ファイルの選択には、まだ作業が必要です。)
画像1枚選択
ユーザーのマッドによってファイルエクスプローラーからの画像のサポートで。
public class BrowsePictureActivity extends Activity {
// this is the action code we use in our intent,
// this way we know we're looking at the response from our own action
private static final int SELECT_PICTURE = 1;
private String selectedImagePath;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViewById(R.id.Button01)
.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
// in onCreate or any event where your want the user to
// select a file
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,
"Select Picture"), SELECT_PICTURE);
}
});
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
Uri selectedImageUri = data.getData();
selectedImagePath = getPath(selectedImageUri);
}
}
}
/**
* helper to retrieve the path of an image URI
*/
public String getPath(Uri uri) {
// just some safety built in
if( uri == null ) {
// TODO perform some logging or show user feedback
return null;
}
// try to retrieve the image from the media store first
// this will only work for images selected from gallery
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
if( cursor != null ){
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String path = cursor.getString(column_index);
cursor.close();
return path;
}
// this is our fallback here
return uri.getPath();
}
}
複数の画像を選択する
コメントでその情報を要求した人がいて、情報が集まっている方が良いので。
追加パラメータを設定する
EXTRA_ALLOW_MULTIPLE
をインテントに追加します。
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
そしてResult処理で、そのパラメータをチェックします。
if (Intent.ACTION_SEND_MULTIPLE.equals(data.getAction()))
&& Intent.hasExtra(Intent.EXTRA_STREAM)) {
// retrieve a collection of selected images
ArrayList<Parcelable> list = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
// iterate over these images
if( list != null ) {
for (Parcelable parcel : list) {
Uri uri = (Uri) parcel;
// TODO handle the images one by one here
}
}
}
なお、APIレベル18以上でのみサポートされています。
関連
-
[解決済み】Android Studioでused import文がunused import文に指定されるのはなぜ?
-
[解決済み] Mockito lenient() を使用する場合
-
[解決済み] div 内の画像を縦に並べる方法
-
[解決済み] アプリケーションからAndroidのWebブラウザでURLを開くにはどうすればよいですか?
-
[解決済み] APKファイルからソースコードを取得する方法はありますか?
-
[解決済み] Bitmapオブジェクトに画像を読み込む際にOutOfMemoryが発生する問題
-
[解決済み] アプリケーションを終了することは嫌われますか?
-
[解決済み] android.os.FileUriExposedException: file:///storage/emulated/0/test.txt が Intent.getData() によりアプリの外部に公開された。
-
[解決済み] メール送信インテント
-
[解決済み] ギャラリー(SDカード)からアプリに使用する画像を選ぶには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】react-native: コマンドが見つかりません。
-
[解決済み] ユーザーが拒否する可能性のあるパーミッションが必要なコール
-
[解決済み】apkインストール時のINSTALL_FAILED_NO_MATCHING_ABIS
-
[解決済み】プロガードを有効にすると、タスク ':app:crashlyticsStoreDeobsDebug' の依存関係を判断できない。
-
[解決済み】Android Studio。adbバージョン」の結果を取得できない
-
[解決済み】Bluestackの向きを変更する : ポートレート/ランドスケープモード
-
[解決済み] サポートされていないメソッドです。BaseConfig.getApplicationIdSuffix()がサポートされていません。
-
[解決済み] Bitmapオブジェクトに画像を読み込む際にOutOfMemoryが発生する問題
-
[解決済み] ギャラリー(SDカード)からアプリに使用する画像を選ぶには?
-
[解決済み】Android 4.4 (KitKat) の Android Gallery が Intent.ACTION_GET_CONTENT に対して異なる URI を返してしまう。