未找到可处理意图的活动:android.Intent.action.VIEW

未找到可处理意图的活动:android.Intent.action.VIEW,android,android-2.2-froyo,galaxy-tab,Android,Android 2.2 Froyo,Galaxy Tab,这是我播放录制的音频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

这是我播放录制的音频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平板电脑中,它运行良好。如何解决这个问题?

我有两个想法:

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


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

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

这是正确的做法

    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的路径需要加前缀
文件:/

因为它是指向存储的本地路径

您可能也需要查看路径本身

`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中的意图。从库中查看视频时,它调用了相同的Intent.View Intent,但将类型设置为“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:找不到可处理意图的活动

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


*课程:确保至少有一个应用程序可以处理您正在调用的意图*

如果您在尝试从android应用程序打开网页时也遇到此错误,这是因为您的url如下所示:

www.google.com

而不是:
https://www.google.com
http://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);
    }
}

只需将您的url传递到
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();
    }
}

这个例外情况是否已更改为

“音频/*”

但thanx给了我一个非常简单但有用的解决方案:

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


如果您的logcat中有这些错误,请使用这些代码帮助我

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


检查此有用的方法:

URLUtil.guessUrl(urlString)


它使google.com->

首先在AndroidManifest中尝试此代码

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

如果未安装默认设置,则在处理浏览器的
深度链接
或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的信息,请参见。

尝试使用任何Url(如add)进行检查

在路径中启动活动
如果它起作用,那么您将添加错误的路径,而不是使用Try-and-catch。你应该这样做

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


是因为你的文件是.3gp,而你告诉系统播放的数据是mp3吗?@Blundell我用3gp bt试过了仍然异常仍然异常05-04 17:30:30.022:WARN/system.err(4937):android.content.ActivityNotFoundException:找不到处理意图的活动{act=android.intent.action.VIEW dat=/mnt/sdcard/audio-android.3gp}正在显示android是否支持您的3gp文件?这似乎是正确的答案,但问题很老,OP上次出现几乎是在2个月前。这就是我所做的。遗憾的是,我只有在找到解决方案后才阅读此答案:)在使用intent.setDataAndType时也适用于视频(数据,“视频/*”);要做到这一点还有很长的路要走:在一个try块中用常规异常处理那么多代码通常不是一个好主意。这里的行为完全没有定义-你能一眼看出哪些输入会打印消息吗?会出现什么异常,为什么会出现?这是代码没有经过彻底测试的迹象。太棒了!这个方案是必须的。
file://
在我的案例中丢失,直到我将
Uri.parse()
更改为
Uri.fromFile()
@Stan thanx以获得解决方案我在url编码时遇到了一个问题,因此请注意,您可能需要执行
Uri.parse(Uri.decode(encodestring))
如果这仍然不起作用,请不要忘记
trim()
url字符串。:-)那么我们如何处理这种情况呢?如果没有带有自定义ROM的自定义测试设备,您将有一个internet活动。这听起来根本不对。我有一个客户报告了相同的问题。因此,似乎有些设备上没有安装默认internet浏览器。如何解决此问题?捕获错误并给出答案信息/对话框/土司显示他们没有工作浏览器?请查看解决方案。在这种情况下,您将知道设备是否包含默认浏览器(或处理深度链接的应用程序)。是!演示如何处理此问题的答案。
Intent window = new Intent(getApplicationContext(), Browser.class);
window.putExtra("LINK", "http://www.yourwebsite.com");
startActivity(window);
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()
    }
}
val intent = Intent(Intent.ACTION_VIEW)
                    intent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
                    intent.setDataAndType(uri, type)    
startActivity(Intent.createChooser(intent, "view action"))