No se encontró actividad para manejar Intent: android.intent.action.VIEW


97

Este es mi código para reproducir el archivo 3gp de audio grabado

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

Pero mientras lo ejecuto en mi dispositivo HTC (Android 2.2 Froyo) muestra una excepción:

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)

En la tableta Galaxy está funcionando bien. ¿Cómo puedo resolver este problema?


1
¿Es porque su archivo es un .3gp y le está diciendo al sistema que reproduzca datos que sean mp3?
Blundell

@Blundell lo intenté con 3gp bt todavía se lanza la excepción
jennifer

Respuestas:


154

Las direcciones URL deben ir precedidas de http: //

Uri uri = Uri.parse("www.google.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);

arroja una ActivityNotFoundException. Si antepone "http: //", problema resuelto.

Uri uri = Uri.parse("http://www.google.com");

Puede que no ayude a OP, pero terminé aquí buscando la misma excepción y tal vez ayude a otros.


8
¡Magnífico! El esquema es imprescindible. file://faltaba en mi caso hasta que me cambié Uri.parse()a Uri.fromFile().
Stan

@Stan gracias por la solución
Serg Burlaka

Estaba teniendo un problema cuando se codificó la URL, así que tenga en cuenta que es posible que deba hacerloUri.parse(Uri.decode(encodedString))
hmac

40

Si también recibe este error al intentar abrir una página web desde su aplicación de Android, es porque su URL se ve así:

www.google.com

en lugar de: https://www.google.comohttp://www.google.com

agregue este código a su Actividad / Fragmento:

 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);
    }
}

simplemente pase su URL a openWebPage(). Si ya tiene el prefijo https://o http://entonces está listo para comenzar, de lo contrario, la declaración if lo maneja por usted


34

Esta es la forma correcta de hacerlo.

    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();
    }

necesitas importar import android.webkit.MimeTypeMap;


este es el camino más largo para hacerlo: d
umerk44

1
Envolver tanto código en un bloque de prueba con una excepción general generalmente no es una buena idea. El comportamiento aquí es totalmente indefinido: ¿puede decir qué entradas imprimirán un mensaje de un vistazo? ¿Qué excepciones surgirán y por qué? Esta es una señal de código que no se ha probado a fondo.
jbass

19

Para mí cuando intento abrir un enlace:

Uri uri = Uri.parse("https://www.facebook.com/abc/");
                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                startActivity(intent);

Tengo el mismo error android.content.ActivityNotFoundException: No Activity found to handle Intent

El problema fue porque no tenía ninguna aplicación que pueda abrir URL (es decir, navegadores) instalada en mi teléfono. Entonces, después de instalar un navegador, el problema se resolvió.

* Lección: asegúrese de que haya al menos una aplicación que maneje la intención que está llamando *


6
Entonces, ¿cómo podemos manejar esta situación?
Nikhil

sin un dispositivo de prueba personalizado con una ROM personalizada, tendrá una actividad en Internet. Esto no suena nada bien.
StarWind0

Un cliente me ha informado del mismo problema. Por lo tanto, parece que hay algunos dispositivos en los que no hay un navegador de Internet predeterminado instalado. ¿Cómo solucionar esto?
Abhijit

¿Detectar el error y dar información / diálogo / brindis de que no tienen un navegador que funcione?
erluxman

1
Vea una solución stackoverflow.com/questions/22479211/… . En este caso, sabrá si un dispositivo contiene un navegador predeterminado (o una aplicación que procesa un enlace profundo).
CoolMind

17

La respuesta de Maragues me hizo comprobar la salida de logcat. Parece que la ruta que pasa a Uri debe tener el prefijo
file:/

Dado que es una ruta local a su almacenamiento.

Es posible que también desee mirar el camino en sí.

`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 }`

El punto de montaje parece aparecer dos veces en la ruta completa.


esta parece ser la respuesta correcta, pero la pregunta es antigua y OP se vio por última vez hace casi 2 meses
Maragues

Esto es lo que hice. Lamentablemente, solo leí esta respuesta después de encontrar las soluciones :)
Janis Peisenieks

10

Si no pasa la URL web correcta y no tiene un navegador, se produce ActivityNotFoundException, así que verifique esos requisitos o maneje la excepción explícitamente. Eso puede resolver tu problema.

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

Tuve este mismo problema, así que estaba mirando la intención que está registrada en LogCat. Al ver el video de la Galería, llamó al mismo intento Intent.View, pero configuró el Tipo en "audio / *", lo que solucionó mi problema y no requiere importar MimeTypeMap. Ejemplo:

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

1
También funciona para videos cuando se usa intent.setDataAndType (data, "video / *") ;
Nestor

3

¿Había cambiado esta excepción a

"audio/*"

Pero gracias a @Stan, me he convertido en una solución muy simple pero útil:

Uri.fromFile(File(content)) en lugar Uri.parse(path)

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

Espero que ayude a alguien a solucionar su problema.


3

Si tiene estos errores en su logcat, use este código, me ayuda

 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());
            }

además

   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());
            }

2

Primero intente este código dentro de AndroidManifest

  <application>

    <uses-library
        android:name="org.apache.http.legacy"
        android:required="false" />
 </application>

Si este código funciona, muy bien. Pero si no. Pruebe este código de la clase a la que desea pasar los datos o uri.

Intent window = new Intent(getApplicationContext(), Browser.class);
window.putExtra("LINK", "http://www.yourwebsite.com");
startActivity(window);

Espero que esto resuelva su problema. Gracias


1

Tengo dos ideas:

Primero: si desea reproducir un archivo 3gp, debe usar los tipos mime "audio / 3gpp" o "audio / mpeg"

Y en segundo lugar: se puede tratar método de uso setData(data)para intentsin ningún tipo de MIME.

Espero que esto ayude.


sigue siendo la excepción 05-04 17: 30: 30.022: WARN / System.err (4937): android.content.ActivityNotFoundException: No se encontró actividad para manejar Intent {act = android.intent.action.VIEW dat = / mnt / sdcard / Se muestra audio-android.3gp}
jennifer

¿Android es compatible con su archivo 3gp? developer.android.com/guide/appendix/media-formats.html
Pasha

1

Esta excepción puede surgir cuando maneja una Deep linkingURL para un navegador, si no hay una instalación predeterminada. En caso de enlaces profundos, es posible que no haya ninguna aplicación instalada que pueda procesar un enlace en formato myapp://mylink.

Puede utilizar la solución mandarina para API hasta 29:

private fun openUrl(url: String) {
    val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
    val activityInfo = intent.resolveActivityInfo(packageManager, intent.flags)
    if (activityInfo?.exported == true) {
        startActivity(intent)
    } else {
        Toast.makeText(
            this,
            "No application that can handle this link found",
            Toast.LENGTH_SHORT
        ).show()
    }
}

Para API> = 30, consulte intent.resolveActivity devuelve nulo en API 30 .


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.