Действия не найдены для работы с Intent: android.intent.action.VIEW
Это мой код для воспроизведения записанного аудио файла 3gp
Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
Uri data = Uri.parse(path);
intent.setDataAndType(data, "audio/mp3");
startActivity(intent);
Но при запуске его на моем устройстве HTC (Android 2.2 Froyo) появляется исключение:
05-04 16:37:37.597: WARN/System.err(4065): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=/mnt/sdcard/mnt/sdcard/audio-android.3gp typ=audio/mp3 }
05-04 16:37:37.597: WARN/System.err(4065): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1567)
05-04 16:37:37.597: INFO/ActivityManager(92): Starting activity: Intent { act=android.intent.action.VIEW dat=/mnt/sdcard/mnt/sdcard/audio-android.3gp typ=audio/mp3 }
05-04 16:37:37.607: WARN/System.err(4065): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1537)
05-04 16:37:37.607: WARN/System.err(4065): at android.app.Activity.startActivityForResult(Activity.java:2858)
05-04 16:37:37.607: WARN/System.err(4065): at android.app.Activity.startActivity(Activity.java:2964)
05-04 16:37:37.607: WARN/System.err(4065): at com.ey.camera.AudioRecorder.playAudio(AudioRecorder.java:244)
05-04 16:37:37.607: WARN/System.err(4065): at com.ey.camera.AudioRecorder$4.onClick(AudioRecorder.java:225)
05-04 16:37:37.607: WARN/System.err(4065): at android.view.View.performClick(View.java:2408)
05-04 16:37:37.607: WARN/System.err(4065): at android.view.View$PerformClick.run(View.java:8817)
05-04 16:37:37.607: WARN/System.err(4065): at android.os.Handler.handleCallback(Handler.java:587)
05-04 16:37:37.607: WARN/System.err(4065): at android.os.Handler.dispatchMessage(Handler.java:92)
05-04 16:37:37.607: WARN/System.err(4065): at android.os.Looper.loop(Looper.java:144)
05-04 16:37:37.607: WARN/System.err(4065): at android.app.ActivityThread.main(ActivityThread.java:4937)
05-04 16:37:37.607: WARN/System.err(4065): at java.lang.reflect.Method.invokeNative(Native Method)
05-04 16:37:37.607: WARN/System.err(4065): at java.lang.reflect.Method.invoke(Method.java:521)
05-04 16:37:37.607: WARN/System.err(4065): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-04 16:37:37.607: WARN/System.err(4065): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-04 16:37:37.607: WARN/System.err(4065): at dalvik.system.NativeStart.main(Native Method)
В планшете Galaxy он работает нормально. Как я могу решить эту проблему?
Ответы
Ответ 1
Адресам Url должно предшествовать http://
Uri uri = Uri.parse("www.google.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
вызывает исключение ActivityNotFoundException. Если вы добавите "http://", проблема будет решена.
Uri uri = Uri.parse("http://www.google.com");
Может не помогать OP, но я оказался здесь в поисках того же исключения и, возможно, он помогает другим.
Ответ 2
Это правильный способ сделать это.
try
{
Intent myIntent = new Intent(android.content.Intent.ACTION_VIEW);
File file = new File(aFile.getAbsolutePath());
String extension = android.webkit.MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(file).toString());
String mimetype = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
myIntent.setDataAndType(Uri.fromFile(file),mimetype);
startActivity(myIntent);
}
catch (Exception e)
{
// TODO: handle exception
String data = e.getMessage();
}
вам нужно импортировать файл android.webkit.MimeTypeMap;
Ответ 3
Если вы также получаете эту ошибку при попытке открыть веб-страницу из своего приложения Android, это связано с тем, что ваш URL-адрес выглядит следующим образом:
www.google.com
вместо:
https://www.google.com
или http://www.google.com
добавьте этот код в свою активность/фрагмент:
public void openWebPage(String url) {
Uri webpage = Uri.parse(url);
if (!url.startsWith("http://") && !url.startsWith("https://")) {
webpage = Uri.parse("http://" + url);
}
Intent intent = new Intent(Intent.ACTION_VIEW, webpage);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
}
просто передайте свой URL-адрес openWebPage()
. Если он уже имеет префикс https://
или http://
, тогда вам хорошо идти, иначе оператор if обрабатывает это для вас
Ответ 4
Ответ Maragues заставил меня проверить выход logcat. Появляется, что путь, который вы передаете Uri, должен быть префикс с помощью file:/
Так как это локальный путь к вашему хранилищу.
Вы также можете слишком взглянуть на сам путь.
`05-04 16:37:37.597: WARN/System.err(4065): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=/mnt/sdcard/mnt/sdcard/audio-android.3gp typ=audio/mp3 }`
Точка монтирования, кажется, появляется дважды в полном пути.
Ответ 5
Для меня при попытке открыть ссылку:
Uri uri = Uri.parse("https://www.facebook.com/abc/");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
Я получил ту же ошибку android.content.ActivityNotFoundException: No Activity found to handle Intent
Проблема заключалась в том, что у меня не было приложения, которое может открывать URL-адреса (т. браузеров), установленных на моем телефоне. Поэтому после установки браузера проблема была решена.
* Урок: убедитесь, что есть хотя бы одно приложение, которое обрабатывает намерение, которое вы вызываете *
Ответ 6
У меня была такая же проблема, поэтому я рассматривал намерение, которое зарегистрировано в LogCat. При просмотре видео в Галерее он назвал то же намерение Intent.View, но установил Type в "audio/*", который исправил мою проблему, и не требует импорта MimeTypeMap. Пример:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
Uri data = Uri.parse(path);
intent.setDataAndType(data, "audio/*");
startActivity(intent);
Ответ 7
Если вы не передаете правильный веб-URL и у вас нет браузера, возникает ActivityNotFoundException, поэтому проверьте эти требования или обработайте исключение явно. Это может решить вашу проблему.
public static void openWebPage(Context context, String url) {
try {
if (!URLUtil.isValidUrl(url)) {
Toast.makeText(context, " This is not a valid link", Toast.LENGTH_LONG).show();
} else {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
context.startActivity(intent);
}
} catch (ActivityNotFoundException e) {
Toast.makeText(context, " You don't have any browser to open web page", Toast.LENGTH_LONG).show();
}
}
Ответ 8
Было ли это исключение даже изменено на
"Аудио/*"
Но благодаря @Stan я получил очень простое, но полезное решение:
Uri.fromFile(File(content))
вместо Uri.parse(path)
val intent =Intent(Intent.ACTION_VIEW)
intent.setDataAndType(Uri.fromFile(File(content)),"audio/*")
startActivity(intent)
Надеюсь, это поможет кому-то решить его проблему.
Ответ 9
Если у вас есть эти ошибки в вашем logcat, используйте этот код, это поможет мне
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(data.getLocation())), "audio/*");
try {
context.startActivity(intent);
} catch (ActivityNotFoundException e) {
Log.d("error", e.getMessage());
}
также
Intent intent = new Intent(MediaStore.INTENT_ACTION_MUSIC_PLAYER);
intent.setDataAndType(Uri.fromFile(new File(data.getLocation())), "audio/*");
try {
context.startActivity(intent);
} catch (ActivityNotFoundException e) {
Log.d("error", e.getMessage());
}
Ответ 10
Проверьте этот полезный метод:
URLUtil.guessUrl(urlString)
Это делает google.com → http://google.com
Ответ 11
У меня есть две идеи:
Во-первых: если вы хотите играть в 3gp файл, вы должны использовать mime-типы "audio/3gpp" или "audio/mpeg"
И во-вторых: вы можете попробовать использовать метод setData(data)
для intent
без какого-либо типа mime.
Надеюсь, что это поможет.