没有找到处理意图的活动: android.Intent.action.VIEW

这是我的代码播放录制的音频3gp 文件

 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)上运行它时,出现了一个例外:

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)

在 Galaxy 平板电脑上运行良好,我该如何解决这个问题呢?

232211 次浏览

我有两个想法:

第一: 如果你想播放3gp 文件,你应该使用哑剧类型“音频/3gpp”或“音频/mpeg”

第二: 您可以尝试在 intent中使用方法 setData(data),而不使用任何 mime 类型。

Url 地址前面必须加上 http://

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

抛出一个 ActivityNotFoundException。如果在前面加上“ http://& quot; ,问题就解决了。

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

这是正确的做法。

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

您需要导入 import android.webkit. MimeTypeMap;

马拉格斯的回答让我检查了 logcat 的输出。似乎您传递给 Uri 的路径需要加上前缀
file:/

因为它是存储的本地路径。

你可能也想看看路径本身。

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

安装点似乎出现两次在完整的路径。

我也有同样的问题,所以我在查看在 LogCat 登录的意图。当从画廊观看视频时,它调用了相同的意图。查看意图,但是将 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

问题是,我没有任何应用程序,可以打开网址(即。 浏览器) ,所以在安装浏览器后 问题解决了。

* 教训: 确保至少有一个应用程序可以处理你要调用的意图 *

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

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

把你的网址传给 openWebPage()。如果它已经以 https://http://作为前缀,那么您就可以开始了,否则 If 语句将为您处理这个问题

如果没有传递正确的 Web URL 并且没有浏览器,则会发生 ActivityNotFoundException,因此请检查这些要求或显式处理异常。可以解决你的问题。

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

如果这个异常改为

“音频/*”

但是,感谢 @ Stan,我已经把非常简单但有用的解决方案:

Uri.fromFile(File(content))而不是 Uri.parse(path)

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

如果您有这些错误在您的日志猫,然后使用这些代码,它帮助我

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

还有

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

检查这个有用的方法:

URLUtil.guessUrl(urlString)

它使得 google.com-> http://google.com

首先在 机器人清单中尝试这个代码

  <application>
       

<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
</application>

如果这个代码有用,那好吧。但如果不是。尝试从 同学们传递数据或 uri 的代码。

Intent window = new Intent(getApplicationContext(), Browser.class);
window.putExtra("LINK", "http://www.yourwebsite.com");
startActivity(window);

如果没有安装默认设置,则在处理浏览器的 Deep linking或 URL 时可能引发此异常。在深度链接的情况下,可能没有安装可以处理格式为 myapp://mylink的链接的应用程序。

对于 API,您可以使用 橘子解决方案,最多可以使用29:

private fun openUrl(url: String) {
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
val activityInfo = intent.resolveActivityInfo(packageManager, intent.flags)
if (activityInfo?.exported == true) {
startActivity(intent)
} else {
Toast.makeText(
this,
"No application that can handle this link found",
Toast.LENGTH_SHORT
).show()
}
}

API > = 30见 ResolveActivity 在 API 30中返回 null

尝试检查任何 Url 喜欢添加

Https://www.google.com

在路径和开始活动 如果它的工作比你添加错误的路径

你应该用这种方法

val intent = Intent(Intent.ACTION_VIEW)
intent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
intent.setDataAndType(uri, type)
startActivity(Intent.createChooser(intent, "view action"))

为了避免在2以下的情况下崩溃,需要进行检查

  1. 检查 url 是以 http 还是 https 开始
  2. 检查设备是否有任何应用程序可以处理网址

科特林

if (url.startsWith("http") || url.startsWith("https")) {
Intent(Intent.ACTION_VIEW,Uri.parse(url)).apply{
// Below condition checks if any app is available to handle intent
if (resolveActivity(packageManager) != null) {
startActivity(this)
}
}
}

我遇到过类似这个案子的问题。以我为例,这种情况经常发生在我手机里没有浏览器应用程序的时候。我安装了一个浏览器应用程序,解决了我的问题。不要忘记将代码放在 试试/接住块中。