Na razie mam tę metodę, ale wyszło, że czegoś brakuje
na przykład mam plik /sdcard/sound.3ga, który zwraca false (jak nie ma aktywności, która mogłaby obsłużyć ten typ pliku), ale kiedy otwieram go z menedżera plików, otwiera się z odtwarzaczem multimedialnym bez problemu
Myślę, że ten zamiar nie jest kompletny i muszę zrobić coś więcej, aby upewnić się, że zmienna handlerExists będzie fałszywa TYLKO jeśli nie ma działania, które mogłoby obsłużyć ten zamiar
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;
Czy próbowałeś tego zamiaru?
źródło
setPackage()
intencji, to się nie powiedzie. Tak więc powinniśmy iśćIntent.resolveActivity()
źródło
Możesz użyć:
źródło
setPackage()
intencji.Korzystanie z Kotlina Jeśli musisz coś zrobić, gdy zamiar nie jest dostępny,
Zaimplementuj tę metodę jako
Jeśli nie masz nic do roboty,
źródło
Inne podejście wykorzystujące rozszerzenie kotlin
Wykorzystanie wewnątrz fragmentu
Wykorzystanie w działalności
źródło
PackageManager
do zabawy z rozszerzeniem zamiastContext
i unikaćPackageManager.MATCH_DEFAULT_ONLY
this.isIntentAvailable(this)
jest niepotrzebnie gadatliwy. Po prostu użyjisIntentAvailable()