web-dev-qa-db-de.com

Wie kann man überprüfen, ob eine Absicht von einer Aktivität behandelt werden kann?

Ich habe diese Methode bisher, aber es ist aufgefallen, dass etwas fehlt

zum Beispiel habe ich eine Datei /sdcard/sound.3ga, die false zurückgibt (als gäbe es keine Aktivität, die mit diesem Dateityp umgehen kann). Wenn ich sie jedoch über den Dateimanager öffne, wird sie problemlos mit dem Media Player geöffnet

Ich denke, diese Absicht ist nicht vollständig und ich muss etwas mehr tun, um sicherzugehen, dass die Variable handlerExists NUR dann falsch ist, wenn es keine Aktivität gibt, die mit dieser Absicht umgehen kann

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;
99
Lukap

die Lösung von edwardxu funktioniert perfekt für mich.

Nur um ein bisschen zu verdeutlichen:

PackageManager packageManager = getActivity().getPackageManager();
if (intent.resolveActivity(packageManager) != null) {
    startActivity(intent);
} else {
    Log.d(TAG, "No Intent available to handle action");
}
122
Sparky1
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
}

Hast du diese Absicht versucht?

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.fromFile(yourFileHere));
76
Mohammad Ersan
if (intent.resolveActivity(getPackageManager()) == null) {
    // No Activity found that can handle this intent. 
}
else{
    // There is an activity which can handle this intent. 
}
41
edwardaa

Sie können verwenden:

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;
}
2
Pedro Lobito