找不到处理Intent的活动:android.intent.action.VIEW

这是我的代码来播放录制的audio3gp文件

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

但在HTC设备( Android 2.2 Froyo )中运行时却显示出一个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) 

在银河平板电脑工作正常…请给我一个解决scheme来解决这个问题

url必须以http://开头

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

抛出一个ActivityNotFoundException。 如果你预先安装“http://”,问题就解决了。

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

可能不会帮助OP,但我最终在这里寻找相同的例外,也许它可以帮助别人。

这是正确的做法。

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

你需要导入导入android.webkit.MimeTypeMap;

通过Maragues让我检查logcat输出。 显示你传递给Uri的path需要加上前缀
file:/

因为这是您存储的本地path。

你也可能也想看看path本身。

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

挂载点似乎在完整path中出现两次。

如果你尝试从Android应用程序打开网页时也出现这个错误,那是因为你的url看起来像这样:

www.google.com

而不是: https://www.google.com : https://www.google.comhttp://www.google.com

将此代码添加到您的活动/片段:

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

只需通过你的urlopenWebPage() 。 如果它已经用https://http://作为前缀,那么你很好,否则if语句为你处理

我有这个相同的问题,所以我在看LogCat中logging的意图。 从Gallery中查看video时,它调用了相同的Intent.View intent,但将Type设置为“audio / *”,这固定了我的问题,并且不需要导入MimeTypeMap。 例:

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

对我来说,当试图打开一个链接:

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

我得到了同样的错误 android.content.ActivityNotFoundException: No Activity found to handle Intent

问题是因为我没有任何应用程序可以打开我的手机安装的URL(即浏览器)。 所以在安装浏览器之后,问题就解决了。

*课程:确保至less有一个应用程序处理你打电话的意图*

我有两个想法:

首先:如果你想播放3gp文件,你应该使用MIMEtypes“audio/ 3gpp”或“audio/ MPEG”

第二:你可以尝试使用方法setData(data)intent没有任何MIMEtypes。

希望这可以帮助。

Interesting Posts