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?
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.
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;
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.
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 *
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é parfile:/
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.
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();
}
}
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());
}
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);
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.
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.