Ich habe diese Methode bisher, aber es kam auf, als ob etwas fehlt
Zum Beispiel habe ich eine Datei /sdcard/sound.3ga, die false zurückgibt (als ob es keine Aktivität gibt, die diesen Dateityp verarbeiten 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 selbst sicherzustellen, dass die Variable handlerExists NUR dann falsch ist, wenn es keine Aktivität gibt, die diese Absicht verarbeiten 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;
Haben Sie diese Absicht versucht?
quelle
setPackage()
die Absicht verwenden, schlägt dies fehl. Also sollten wir uns fürIntent.resolveActivity()
quelle
Sie können verwenden:
quelle
setPackage()
die Absicht verwendet wird.Verwenden von Kotlin Wenn Sie etwas tun müssen, wenn keine Absicht verfügbar ist,
Implementieren Sie diese Methode als
Wenn Sie nichts zu tun haben,
quelle
Ein anderer Ansatz mit Kotlin-Erweiterung
Verwendung innerhalb des Fragments
Verwendung innerhalb der Aktivität
quelle
PackageManager
für Ihre Erweiterung Spaß anstelle vonContext
und vermeidenPackageManager.MATCH_DEFAULT_ONLY
this.isIntentAvailable(this)
ist unnötig ausführlich. Verwenden Sie einfachisIntentAvailable()