2013-03-14 33 views
74

Tôi có phương pháp này cho đến nay, nhưng nó xuất hiện như một cái gì đó bị thiếuLàm thế nào để kiểm tra xem một mục đích có thể được xử lý từ một số hoạt động?

ví dụ tôi có tệp /sdcard/sound.3ga trả về false (như không có hoạt động nào có thể xử lý loại tệp này) , Nhưng khi tôi mở nó từ trình quản lý tệp, nó sẽ mở ra với trình phát đa phương tiện không có vấn đề

Tôi nghĩ ý định này chưa hoàn thành và tôi cần phải làm gì đó để đảm bảo rằng biến handlerExists sẽ là CHỈ nếu không có hoạt động nào có thể xử lý mục đích này

PackageManager pm = getPackageManager(); 
Intent intent = new Intent(android.content.Intent.ACTION_VIEW); 
String extension = android.webkit.MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(new File(uriString)).toString()); 
String mimetype = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); 
intent.setDataAndType(Uri.fromFile(new File(uriString)),mimetype); 
boolean handlerExists = intent.resolveActivity(pm) != null; 

Trả lời

71
PackageManager manager = context.getPackageManager(); 
List<ResolveInfo> infos = manager.queryIntentActivities(intent, 0); 
if (infos.size() > 0) { 
    //Then there is an Application(s) can handle your intent 
} else { 
    //No Application can handle your intent 
} 

Bạn đã thử ý định này chưa? giải pháp

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.fromFile(yourFileHere)); 
+0

vâng tôi đã làm, nhưng nó sẽ trả về false, nó hoạt động giống như phương pháp của tôi cho đến nay :(, nó phải là cái gì mà thiếu – Lukap

+0

đó là vì bạn quên: intent.setType ("text/plain"); –

+1

cờ 0 là gì đây – RyPope

23
if (intent.resolveActivity(getPackageManager()) == null) { 
    // No Activity found that can handle this intent. 
} 
else{ 
    // There is an activity which can handle this intent. 
} 
83

edwardxu của hoạt động hoàn hảo cho tôi.

Chỉ cần làm rõ một chút:

PackageManager packageManager = getActivity().getPackageManager(); 
if (intent.resolveActivity(packageManager) != null) { 
    startActivity(intent); 
} else { 
    Log.d(TAG, "No Intent available to handle action"); 
} 
+0

Đây là câu trả lời ngắn gọn và gọn gàng hơn –

2

Bạn có thể sử dụng:

public static boolean isAvailable(Context ctx, Intent intent) { 
    final PackageManager mgr = ctx.getPackageManager(); 
    List<ResolveInfo> list = 
     mgr.queryIntentActivities(intent, 
     PackageManager.MATCH_DEFAULT_ONLY); 
    return list.size() > 0; 
} 
+0

Điều này không hoạt động khi sử dụng 'setPackage()' trên ý định. – CopsOnRoad

Các vấn đề liên quan