1

ユーザーがボタンをクリックして、ギャラリーや同様のアプリ、または組み込みのアプリではなくアプリにあるカメラ アクティビティを選択できるようにしたいと考えています。関連する回答をこちらこちらで読みました。ただし、組み込みのカメラ アプリは含めたくありませんが、カメラ アクティビティは含めたいと考えています。

投稿した2つのリンクから取得した、これまでに次の設定を行いました。

Intent pickIntent = new Intent(Intent.ACTION_PICK_ACTIVITY);
Intent gallIntent = new Intent(Intent.ACTION_GET_CONTENT);
gallIntent.setType("image/*");

Intent camIntent = new Intent(UserEventsActivity.this,CameraActivity.class);
camIntent.setComponent(new ComponentName("MCamera", "Camera"));

List<Intent> yourIntentsList = new ArrayList<Intent>();
yourIntentsList.add(camIntent);


List<ResolveInfo> listGall = getApplicationContext().getPackageManager().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);
}


pickIntent.putExtra(Intent.EXTRA_INTENT, yourIntentsList.toArray(new Parcelable[]{}));

pickIntent.putExtra(Intent.EXTRA_TITLE, "Select Source");
startActivityForResult(pickIntent, 1);

この結果、関連のないアプリやサービスの大きなリストが作成され、そのほとんどが実際にはリスト内で何度も繰り返されています。さらに、私のカメラ アクティビティはその中にありません。必要な関連ギャラリー アプリを取得するだけでpickIntent.putExtra(Intent.EXTRA_INTENT,gallIntent)、アクティビティを追加できません。

私が間違っていることについてのアイデアはありますか?

さらに、クリックしてもサービスが開きません。ただし、これは '1' 引数に関連している可能性がありますstartActivityOnResult。その引数に何を入力すればよいか正確にはわかりません。

4

1 に答える 1

0

私は可能な解決策を思いつきました。それは私にとってはうまくいくようです。カスタムダイアログを使用しました:

final Dialog choosePicContent = new Dialog(UserEventsActivity.this);
            ScrollView scrollContent = new ScrollView(UserEventsActivity.this);
            choosePicContent.addContentView(scrollContent, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
            LinearLayout scrollLayout = new LinearLayout(UserEventsActivity.this);
            scrollContent.addView(scrollLayout);
            scrollLayout.setOrientation(LinearLayout.VERTICAL);

            TextView title = new TextView(UserEventsActivity.this);
            title.setText(R.string.selectsource);
            scrollLayout.addView(title);
            Intent gallIntent = new Intent(Intent.ACTION_GET_CONTENT);
            gallIntent.setType("image/*");

            final Intent camIntent = new Intent(UserEventsActivity.this,CameraActivity.class);

            ImageButton camButton = new ImageButton(UserEventsActivity.this);
            camButton.setImageDrawable(getApplicationContext().getDrawable(R.drawable.ic_menu_camera));
            camButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    camIntent.putExtra("User",current_user);
                    startActivity(camIntent);
                }
            });
            scrollLayout.addView(camButton);

          List<ResolveInfo> listGall = getApplicationContext().getPackageManager().queryIntentActivities(gallIntent, 0);
            for (ResolveInfo res : listGall) {


                    final Intent finalIntent = new Intent(gallIntent);
                    finalIntent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));

                    ImageButton iconButton = new ImageButton(UserEventsActivity.this);
                    iconButton.setImageDrawable(res.activityInfo.loadIcon(getPackageManager()));
                    iconButton.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            startActivityForResult(finalIntent,1);
                        }
                    });
                    scrollLayout.addView(iconButton);

            }
            choosePicContent.show();
于 2016-01-06T01:09:18.347 に答える