web-dev-qa-db-fra.com

Aucune activité trouvée pour gérer Intention: Android.intent.action.VIEW

Ceci est 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 lors de son exécution sur mon appareil HTC (Android 2.2 Froyo), une exception se dégage:

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)

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

84
jennifer

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

lève une exception ActivityNotFoundException. Si vous préférez "http: //", le problème est résolu.

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

Peut ne pas aider OP, mais je me suis retrouvé ici à chercher la même exception et peut-être que cela aide les autres.

140
Maragues

C'est la bonne façon de le faire.

    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 importer Android.webkit.MimeTypeMap;

33
Nitan Sehgal

Si vous obtenez également cette erreur lorsque vous essayez d'ouvrir une page Web depuis votre Android app), c'est parce que votre URL ressemble à ceci:

www.google.com

au lieu de: https://www.google.com ou 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(). Si elle est déjà préfixée avec https:// Ou http://, Vous pouvez continuer, sinon l'instruction if le gère pour vous.

28
ojonugwa ochalifu

Pour moi en essayant 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 la même erreurAndroid.content.ActivityNotFoundException: No Activity found to handle Intent

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

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

16
erluxman

Answer by Maragues m'a fait vérifier la sortie de logcat. Apparaît 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 stockage.

Vous voudrez peut-être aussi regarder 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.

16
Joel Bodega

Si vous ne transmettez pas l'URL Web correcte et ne possédez pas de navigateur, ActivityNotFoundException se produit. Vérifiez donc ces exigences ou gérez explicitement l'exception. Cela peut résoudre votre problème.

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

Si vous avez ces erreurs dans votre logcat, utilisez ces codes, aidez-moi

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

aussi

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

J'ai eu le même problème, donc je regardais l'intention qui est enregistrée dans LogCat. Lors de la visualisation de la vidéo à partir de la Galerie, il a appelé la même intention Intent.View, mais définissez le Type sur "audio/*", ce qui a résolu mon problème et ne nécessite pas l'importation de MimeTypeMap. Exemple:

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

Vérifiez cette méthode utile:

URLUtil.guessUrl(urlString)

Cela fait google.com -> http://google.com

3
niko1312

Cette exception avait-elle même changé pour

"l'audio/*"

Mais merci à @ Stan je me suis tourné très simple mais utile solution:

Uri.fromFile(File(content)) à la place de Uri.parse(path)

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

J'espère que ça aide quelqu'un à résoudre son problème.

3
Serg Burlaka

J'ai deux idées:

Premièrement: si vous voulez lire un fichier 3gp, vous devez utiliser les types MIME "audio/3gpp" ou "audio/mpeg"

Et deuxièmement: vous pouvez essayer d'utiliser la méthode setData(data) pour intent sans aucun type mime.

J'espère que cela t'aides.

1
Pasha