这是我的代码来播放录制的音频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平板电脑上运行良好。如何解决这个问题?
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");
如果您在尝试从android应用程序打开网页时也得到此错误,这是因为您的url看起来像这样:
www.google.com
代替:https://www.google.com
或http://www.google.com
将此代码添加到Activity/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);
}
}
将url传递给openWebPage()
。如果已经用https://
或http://
作为前缀,那么就可以了,否则If语句会为你处理
这才是正确的做法。
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;
当我尝试打开链接时:
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(即。浏览器)安装在我的手机。安装浏览器后问题解决了。
*经验:确保至少有一个应用程序处理你正在调用的意图*
margues的回答让我检查了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 }`
挂载点似乎在完整路径中出现了两次
如果您没有传递正确的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();
}
}
检查这个有用的方法:
URLUtil.guessUrl(urlString)
它使google.com -> http://google.com
当您处理浏览器的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参见intent。
为了避免崩溃,需要检查以下两点
- 检查url是否以http或https开头
- 检查设备是否有任何应用程序可以处理url
芬兰湾的科特林
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)
}
}
}
我也有同样的问题,所以我正在查看LogCat中记录的意图。当从画廊观看视频时,它调用了相同的Intent。查看意图,但将类型设置为"audio/*",这解决了我的问题,并且不需要导入MimeTypeMap。例子:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
Uri data = Uri.parse(path);
intent.setDataAndType(data, "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());
}
是否将此异常更改为
"音频/*"
但是感谢@Stan,我已经变成了非常简单但有用的解决方案:
Uri.fromFile(File(content))
代替Uri.parse(path)
val intent =Intent(Intent.ACTION_VIEW)
intent.setDataAndType(Uri.fromFile(File(content)),"audio/*")
startActivity(intent)
我有两个想法:
第一:如果你想播放3gp文件,你应该使用mime类型"audio/3gpp"或"音频/mpeg"
第二:你可以尝试使用setData(data)
方法intent
没有任何mime类型
首先在AndroidManifest
中尝试这段代码 <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);
而不是使用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"))
尝试使用add
https://www.google.com在路径中并启动活动如果它的工作比你添加错误的路径
我遇到过这样一个问题。在我的情况下,当我的手机里没有浏览器应用程序时,就会发生这种情况。我安装了一个浏览器应用程序,解决了这个问题。不要忘记把你的代码放在Try/Catch块中。