1

拡張機能に関連付けられている既定のプログラムのアイコンを取得しようとしています。

これが私のコードです:

Intent intent = new Intent(Intent.ACTION_VIEW);
MimeTypeMap mime = MimeTypeMap.getSingleton();
String tt = mime.getMimeTypeFromExtension(getExtension());

intent.setDataAndType(Uri.fromFile(getFile()), tt);

List<ResolveInfo> matches = c.getPackageManager().queryIntentActivities(intent, 0);

for (ResolveInfo match : matches) {
     if(match.isDefault){
          //GET ICON
     }
}

問題は、PackageManager のフラグを からにmatch.isDefault設定しようとしても、常に false を返すことです。0PackageManager.MATCH_DEFAULT_ONLY

明らかに、私がテストしているファイル (ビデオ) は、デフォルトでプログラム (MX Player) に関連付けられています。

誰か助けてくれませんか?

前もって感謝します。

4

1 に答える 1

3

別の解決策として、代わりにこのメソッドを使用してデフォルトのインテントを取得することをお勧めします。

     ResolveInfo info = getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);

返される結果は次のようになります。

  1. インテントにデフォルトが設定されていない場合: info.activityInfo.name は「com.android.internal.app.ResolverActivity」と等しくなります。

  2. インテントにデフォルトのアプリが設定されている場合は、ResolveInfo オブジェクトでデフォルトのアプリ情報を確認できます。

編集:

URLの場合、次のようなことができます:

    //Example: youtube url
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v=something"));
    ResolveInfo defaultResolution = getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);

    //Print the activity name
    Log.i(TAG, "defaultResolution:" + defaultResolution.activityInfo.name);
于 2013-08-15T10:33:34.023 に答える