Не найдено действий для обработки намерений: android.intent.action.VIEW - PullRequest
78 голосов
/ 04 мая 2011

Это мой код для воспроизведения записанного аудио файла 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)

ВПланшет Галактика работает нормально.Как я могу решить эту проблему?

Ответы [ 11 ]

137 голосов
/ 03 июня 2011

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, но я здесь, в поисках того же исключения, и, возможно, это помогает другим.

33 голосов
/ 20 июня 2011

Это правильный способ сделать это.

    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;

27 голосов
/ 25 января 2017

Если вы также получаете эту ошибку при попытке открыть веб-страницу из вашего приложения для 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 справится с этим

16 голосов
/ 02 августа 2016

Для меня при попытке открыть ссылку:

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 (т.е. браузеры), установленного в моем телефоне.Поэтому после установки браузера проблема была решена.

* Урок. Убедитесь, что есть хотя бы одно приложение, которое обрабатывает намерение, которое вы вызываете *

16 голосов
/ 25 августа 2011

Ответ от 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 голосов
/ 01 марта 2018

Если вы не передаете правильный веб-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();
    }
}
3 голосов
/ 19 декабря 2018

Проверьте этот полезный метод:

URLUtil.guessUrl(urlString)

Это делает google.com -> http://google.com

3 голосов
/ 15 декабря 2018

Если у вас есть эти ошибки в вашем 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());
            }
3 голосов
/ 23 апреля 2018

Если бы это исключение даже изменилось на

"audio / *"

Но благодаря @ Stan я стал очень простым, но полезнымрешение:

Uri.fromFile(File(content)) вместо Uri.parse(path)

 val intent =Intent(Intent.ACTION_VIEW)
                    intent.setDataAndType(Uri.fromFile(File(content)),"audio/*")
                    startActivity(intent)

Надеюсь, это поможет кому-нибудь решить его проблему.

3 голосов
/ 19 декабря 2011

У меня была такая же проблема, поэтому я искал намерение, которое зарегистрировано в LogCat. При просмотре видео из Галереи оно вызывало то же намерение Intent.View, но установило для типа значение «audio / *», что устранило мою проблему и не требует импорта MimeTypeMap. Пример:

Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
Uri data = Uri.parse(path);
intent.setDataAndType(data, "audio/*");
startActivity(intent);
...