これまでこの方法を使ってきましたが、何かが欠けているように感じました
たとえば、/sdcard/sound.3gaというファイルがあり、これはfalseを返します(このタイプのファイルを処理できるアクティビティがないようです)。しかし、ファイルマネージャーから開くと、メディアプレーヤーで問題なく開きます。
このインテントは完全ではないと思うので、このインテントを処理できるアクティビティがない場合にのみ、handlerExists 変数が false になるように自分で確認するために何か追加する必要があると思います。
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;
ベストアンサー1
edwardxu の解決策は私にとって完璧に機能します。
少し明確にすると:
PackageManager packageManager = getActivity().getPackageManager();
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent);
} else {
Log.d(TAG, "No Intent available to handle action");
}