1. ホーム
  2. android

[解決済み] 画像にカメラまたはギャラリーを選択できるようにする。

2022-04-27 05:15:26

質問

私がやろうとしていることはとても簡単なことのようですが、数日検索してもよくわかりません。

複数(最大5枚)の画像を選択できるアプリケーションを持っています。このアプリケーションでは ImageView . ユーザが ImageView を選択できるようにしたいと思います。

  1. ギャラリーから画像を選択するか
  2. カメラで画像を撮影する。

を使うことから始めました。 ACTION_GET_CONTENT インテントを使用すると、ギャラリーにアクセスするのに便利です。そこで、次に ACTION_PICK_ACTIVITY インテントを使用して、ユーザーがカメラまたはギャラリーを選択できるようにします。

Intent pickIntent = new Intent(Intent.ACTION_PICK_ACTIVITY);
Intent gallIntent=new Intent(Intent.ACTION_GET_CONTENT);
gallIntent.setType("image/*"); 
Intent camIntent = new Intent("android.media.action.IMAGE_CAPTURE");
pickIntent.putExtra(Intent.EXTRA_INTENT, camIntent);
pickIntent.putExtra(Intent.EXTRA_INTENT, gallIntent)
pickIntent.putExtra(Intent.EXTRA_TITLE, "Select Source");
startActivityForResult(pickIntent, IMAGE_SELECTOR);

を1つしか追加できないようです。 EXTRA_INTENT . メニューは予想通り表示されますが、オプションはGalleryとFilesのみです(Cameraはありません)。

私が見逃している、より良い/より簡単な方法はありますか?助けてくれてありがとうございます。

解決方法は?

両方のインテント解決結果をマージする独自のチョーサーダイアログを作成する必要があります。

これを行うには、PackageManagerに以下のような問い合わせをする必要があります。 PackageManager.queryIntentActivities() の両方のオリジナルインテントを取得し、このように取得したアクティビティごとに1つの新しいインテントを持つ、可能なインテントの最終リストを作成します。

List<Intent> yourIntentsList = new ArrayList<Intent>();

List<ResolveInfo> listCam = packageManager.queryIntentActivities(camIntent, 0);
for (ResolveInfo res : listCam) {
    final Intent finalIntent = new Intent(camIntent);
    finalIntent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
    yourIntentsList.add(finalIntent);
}

List<ResolveInfo> listGall = packageManager.queryIntentActivities(gallIntent, 0);
for (ResolveInfo res : listGall) {
    final Intent finalIntent = new Intent(gallIntent);
    finalIntent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
    yourIntentsList.add(finalIntent);
}

(ここに直接書いたので、コンパイルできないかもしれません)

そして、リストからカスタムダイアログを作成するための詳細な情報は、以下を参照してください。 https://developer.android.com/guide/topics/ui/dialogs.html#AlertDialog