android - 如何检查是否可以从某些 Activity 中处理 Intent ?

标签 android android-intent mime-types file-type intentfilter

到目前为止我有这个方法,但它出现的时候好像缺少了什么

例如,我有一个文件/sdcard/sound.3ga 返回 false(就像没有可以处理此类文件的 Activity 一样),但是当我从文件管理器打开它时,它会使用媒体播放器打开,但没有问题

我认为这个 Intent 并不完整,我需要做更多的事情来让我自己确保 handlerExists 变量只有在没有可以处理这个 Intent 的 Activity 时才会为假

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;

最佳答案

edwardxu 的解决方案非常适合我。

澄清一下:

PackageManager packageManager = getActivity().getPackageManager();
if (intent.resolveActivity(packageManager) != null) {
    startActivity(intent);
} else {
    Log.d(TAG, "No Intent available to handle action");
}

关于android - 如何检查是否可以从某些 Activity 中处理 Intent ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15407502/

相关文章:

f4v 的 HTML5 MIME 类型

html - HTML/网页使用哪些 MIME 类型

android - Gradle 多字符串值文件

java - Android 时间和字符串

android - 无法在 barcode_scanner flutter 中找到明确的 Activity 类

java - Cordova 上的 Android Lollipop 通知图标 setColor

java - 启用 ListView 中显示的号码的电话调用

android - 将一个 Activity 的引用传递给另一个 Activity

android - 如何通过 AsyncTask 正确使用 Intent 和 Uri 数据

android - 注册 Android 应用程序以接收某些文件类型