2011-05-04 9 views
47

Este es mi código para reproducir el archivo de audio grabado 3gpno hemos encontrado actividad de manejar Intención: android.intent.action.VIEW

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

pero mientras se ejecuta en el 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 su tablet Galaxy funcionando bien ... Pls me da una solución para resolver este problema

+1

¿Es porque su archivo es un .3gp y le dice al sistema que reproduzca los datos que son mp3? – Blundell

+0

@Blundell probé con 3gp bt aún se emite la excepción – jennifer

Respuesta

0

tengo dos idea:

Primero: si desea reproducir archivos 3gp se debe utilizar tipos MIME "audio/3GPP" o "audio/mpeg"

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

Espero que esto ayude.

+0

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

+0

¿Admite Android su archivo 3gp? http://developer.android.com/guide/appendix/media-formats.html – Pasha

109

direcciones URL debe estar precedidos por http: //

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

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

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

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

+3

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

29

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

necesita importar importar android.webkit.MimeTypeMap;

+0

este es el largo camino para hacerlo: d – umerk44

+0

Envolver ese código en un bloque try con excepción general no suele ser 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é? Este es un signo de código que no se ha probado a fondo. – jbass

15

La respuesta de Maragues me hizo ver la salida del logcat. Parece ser que el camino se pasa a Uri necesita ser prefijado con
file:/

Dado que es una ruta local para su almacenamiento.

Es posible que también desee ver la ruta 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.

+0

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

+0

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

+1

Adjuntar archivo:/me ayudó y funcionó como un amuleto. – abhilashca

2

Tuve el mismo problema, así que estaba buscando la intención que está registrada en LogCat. Al ver el video de la Galería, llamó al mismo intento de Intent.View, pero estableció el Tipo en "audio/*", 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

5

Para mí al intentar abrir un enlace:

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

me dieron el mismo errorandroid.content.ActivityNotFoundException: No Activity found to handle Intent

El problema se debía a que no tuve ninguna aplicación que puede abrir URL (es decir, navegadores) instalados en mi teléfono. Entonces, después de instalar un navegador, se solucionó el problema .

* Lección: Asegúrese de que hay al menos una aplicación que se encarga de la intención que está llamando *

+0

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

+0

Atrápalo y muéstrele un mensaje ... – erluxman

20

Si también está recibiendo este error al intentar abrir una página web desde su aplicación para Android se es porque su URL tiene el siguiente aspecto:

www.google.com

en lugar de: https://www.google.com o http://www.google.com

añadir 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); 
    } 
} 

sólo tiene que pasar su URL a openWebPage(). Si ya tiene el prefijo https:// o http:// entonces usted está listo para salir, de lo contrario la sentencia if se encarga de eso para usted

0

Si no pasa el URL de la tela correcta y no tiene un navegador, se produce ActivityNotFoundException, por lo 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(); 
    } 
} 
Cuestiones relacionadas