0

ここで、ギャラリーから写真を選択するためのオプションをユーザーに提供するために、ちょっとした問題が発生します。特定の携帯電話では、ユーザーが選択したインテントを処理すると主張するアプリが増えています...標準的な問題のフォトギャラリーだけに標準的な方法でそれをフィルタリングする方法はありますか?

p.queryIntentActivities の最初の項目は常にギャラリーになりますか?

これが、アプリのリストを取得するために行っていることです....

Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.setType("image/*");
i.putExtra("return-data", true);
PackageManager p = new PackagerManager();
List<ResolveInfo> list = p.queryIntentActivities(i, 0);

したがって、resolveinfo が 1 つだけ取得できれば... すばらしいです。しかし、リストに複数の項目がある場合... packageName によるフィルタリングは、packageName が何であるかがわからないため、一種のハックのように思えます...そこにはあまりにも多くの異なる電話があります。

何かアドバイス?

4

2 に答える 2

0

ResolveInfo から特定のアプリを使用する方法は次のとおりです。これは、使用するアプリが正確にわかっていて、「完全なアクションを使用して」ダイアログを表示したくない場合に役立ちます。

  1. Intent.ACTION_GET_CONTENT に応答するアプリのクエリ:

    Intent intent= new Intent(Intent.ACTION_GET_CONTENT, null);
    intent.setType("image/*");
    mApps = context.getPackageManager().queryIntentActivities(intent, 0);
    
  2. mApps は、Intent.ACTION_GET_CONTENT インテントをサポートするすべてのアプリのリストを保持します。

  3. 目的のアプリの startActivityForResult を起動します。

    ResolveInfo info = mApps.get(position); // depends on which app you want to start
    String packageName = info.activityInfo.packageName;
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_GET_CONTENT);
    intent.setPackage(packageName); // this will direct the intent to your specific app
    intent.setType("image/*");
    intent.putExtra("crop", "true");
    ...
    startActivityForResult(intent, PICK_IMAGE);
    
于 2014-03-29T18:26:44.490 に答える