Eu tenho esse método até agora, mas surgiu como se algo estivesse faltando
por exemplo, eu tenho um arquivo /sdcard/sound.3ga que retorna falso (como se não houvesse nenhuma atividade que pudesse lidar com este tipo de arquivo), mas quando eu o abro no gerenciador de arquivos ele abre com o reprodutor de mídia sem problemas
Acho que esse intent não está completo e preciso fazer algo mais para ter certeza de que a variável handlerExists será falsa SOMENTE se não houver atividade que possa lidar com esse intent
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;
Você já tentou esta intenção?
fonte
setPackage()
a intenção, isso falhará. Então, devemos ir paraIntent.resolveActivity()
fonte
Você pode usar:
fonte
setPackage()
no intent.Usando Kotlin Se você precisar fazer algo quando o intent não estiver disponível,
Implemente este método como
Se você não tem nada para fazer,
fonte
Outra abordagem usando a extensão kotlin
Uso dentro do fragmento
Uso dentro da atividade
fonte
PackageManager
para sua diversão de extensão em vez deContext
evitarPackageManager.MATCH_DEFAULT_ONLY
this.isIntentAvailable(this)
é desnecessariamente prolixo. Basta usarisIntentAvailable()