112 votes

Aucune activité n'a été trouvée pour gérer l'intention : Android.intent.action.VIEW

Voici mon code pour lire le fichier audio 3gp enregistré

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

Mais en l'exécutant sur mon appareil HTC (Android 2.2 Froyo), il y a une exception :

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)

Sur la tablette Galaxy, cela fonctionne bien. Comment puis-je résoudre ce problème ?

1 votes

Est-ce parce que votre fichier est un .3gp et que vous demandez au système de lire des données qui sont des mp3 ?

0 votes

@Blundell J'ai essayé avec 3gp mais l'exception est toujours levée.

167voto

Maragues Points 9461

Les adresses URL doivent être précédées de http://.

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

lance une exception "ActivityNotFoundException". Si vous ajoutez "http://", le problème est résolu.

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

9 votes

Superbe ! Le schéma est un must. file:// manquait dans mon cas jusqu'à ce que je modifie Uri.parse() a Uri.fromFile() .

0 votes

@Stan merci pour la solution

0 votes

J'ai rencontré un problème lorsque l'url a été encodée, alors notez que vous devrez peut-être faire ce qui suit Uri.parse(Uri.decode(encodedString))

57voto

ojonugwa ochalifu Points 14742

Si vous obtenez également cette erreur lorsque vous essayez d'ouvrir une page web à partir de votre application Android, c'est parce que votre URL ressemble à ceci :

www.google.com

au lieu de : https://www.google.com o http://www.google.com

ajoutez ce code à votre activité/fragment :

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

il suffit de passer votre url à openWebPage() . S'il est déjà précédé de https:// o http:// Sinon, l'instruction if s'en charge pour vous.

33voto

Nitan Sehgal Points 339

C'est la bonne façon de procéder.

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

vous devez importer import Android.webkit.MimeTypeMap ;

0 votes

C'est la façon la plus longue de procéder :d

1 votes

Envelopper autant de code dans un bloc try avec une exception générale n'est généralement pas une bonne idée. Le comportement ici est totalement indéfini - pouvez-vous dire quelles entrées afficheront un message au premier coup d'œil ? Quelles exceptions se produiront, et pourquoi ? C'est le signe d'un code qui n'a pas été testé de manière approfondie.

22voto

Pour moi, lorsque j'essaie d'ouvrir un lien :

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

J'ai obtenu la même erreur android.content.ActivityNotFoundException: No Activity found to handle Intent

Le problème était que je n'avais pas d'application capable d'ouvrir des URL (c'est-à-dire des navigateurs) installée sur mon téléphone. navigateurs) installée sur mon téléphone. Après avoir installé un navigateur, le problème a été résolu.

*Leçon : Assurez-vous qu'il existe au moins une application qui gère l'intention que vous appelez.

6 votes

Comment gérer cette situation ?

0 votes

Sans un appareil de test personnalisé avec une ROM personnalisée, vous aurez une activité internet. Cela ne semble pas correct du tout.

0 votes

Je rencontre le même problème signalé par un client. Il semble donc qu'il y ait des appareils sur lesquels aucun navigateur Internet par défaut n'est installé. Comment résoudre ce problème ?

18voto

Joel Bodega Points 454

La réponse de Maragues m'a incité à vérifier la sortie de logcat. Il semble que le chemin que vous passez à Uri doit être préfixé par
file:/

Puisqu'il s'agit d'un chemin d'accès local à votre espace de stockage.

Vous pouvez également vous pencher sur le chemin lui-même.

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

Le point de montage semble apparaître deux fois dans le chemin complet.

0 votes

Cela semble être la bonne réponse, mais la question est ancienne et l'OP a été vu pour la dernière fois il y a presque 2 mois.

0 votes

Voici ce que j'ai fait. Malheureusement, je n'ai lu cette réponse qu'après avoir trouvé les solutions :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X