J'ai cette méthode jusqu'à présent, mais il est apparu comme s'il manquait quelque chose
par exemple, j'ai un fichier /sdcard/sound.3ga qui renvoie false (comme s'il n'y a pas d'activité qui puisse gérer ce type de fichier), mais quand je l'ouvre depuis le gestionnaire de fichiers, il s'ouvre avec le lecteur multimédia sans problème
Je pense que cette intention n'est pas complète et je dois faire quelque chose de plus pour m'assurer que la variable handlerExists sera fausse UNIQUEMENT s'il n'y a aucune activité qui peut gérer cette intention
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;
Avez-vous essayé cette intention?
la source
setPackage()
l'intention, cela échouera. Donc, nous devrions aller pourIntent.resolveActivity()
la source
Vous pouvez utiliser:
la source
setPackage()
de l'intention.Utilisation de Kotlin Si vous devez faire quelque chose lorsque l'intention n'est pas disponible,
Implémentez cette méthode comme
Si tu n'as rien à faire,
la source
Une autre approche utilisant l'extension kotlin
Utilisation à l'intérieur du fragment
Utilisation à l'intérieur de l'activité
la source
PackageManager
pour votre plaisir d'extension au lieu deContext
et éviterPackageManager.MATCH_DEFAULT_ONLY
this.isIntentAvailable(this)
est inutilement verbeux. Il suffit d'utiliserisIntentAvailable()