Xamarin Android 应用程序因“意图必须包含显式包名称来构建 android-app”而崩溃
Posted
技术标签:
【中文标题】Xamarin Android 应用程序因“意图必须包含显式包名称来构建 android-app”而崩溃【英文标题】:Xamarin Android app crashing with "Intent must include an explicit package name to build an android-app" 【发布时间】:2017-05-21 01:18:03 【问题描述】:我的Xamarin android
应用程序需要弹出图库,以便用户可以选择现有照片,在这种情况下,我再次保存所选图像的 URI。
在我的一个测试用户拥有的 Galaxy S5 上,它每次都崩溃。但它在我更便宜/更旧的华为测试手机上运行良好。
我正在使用 Azure Mobile Center 进行崩溃报告,我在错误日志中看到了这一点。从 Galaxy S5 实时调试时,我还看到直接从 Visual Studio 中抛出此错误...
Intent 必须包含一个明确的包名来构建一个 android-app: 意图 dat=content://media/external/images/media/4238 flg=0x1 VirtualScreenParam=ParamsmDisplayId=-1, null, mFlags=0x00000000) (有额外的)
这是我创建从图库中选择的意图的方法:
public void HandleRecord(object sender, EventArgs ea)
...
//Choose from gallery
else if (args.Which == 1)
var intent = new Intent(Intent.ActionPick);
intent.SetType("image/*");
this.StartActivityForResult(Intent.CreateChooser(intent, "Select Picture"), SELECT_FILE);
代码在我的 OnActivityResult 方法的这一行崩溃了...
if (requestCode == SELECT_FILE)
ImageUri = Android.Net.Uri.Parse(data.ToUri(IntentUriType.AndroidAppScheme));
【问题讨论】:
哪些 API 版本崩溃了?它们都一样吗? (即 API 21?) 从我在 Azure Mobile Center 中看到的,主要设备是“SM-G930F”(Galaxy S7?)所以我认为它真的是新的,即版本 23? 拍照或选择照片后应用崩溃?每次应用崩溃时,您是否也会遇到相同的错误? 你试过用 Intent.ActionGetContent 代替 Intent.ActionPick 吗? 检查是否有相机应用程序可用于处理此意图,即执行 intent.ResolveActivity(packageManager) != null 如果没有,那么我建议预安装一个好的相机应用程序来处理像 opencamera 这样的意图跨度> 【参考方案1】:天哪,找到了。在 API 23+ 上,我必须在声明“从图库中选择图像”选项的意图时添加这行代码:
intent.SetPackage("com.android.gallery");
所以整体代码变成了:
var intent = new Intent(Intent.ActionGetContent );
intent.SetType("image/*");
intent.SetPackage("com.android.gallery");
this.StartActivityForResult(Intent.CreateChooser(intent, "Select Picture"), SELECT_FILE);
我永远不会明白为什么在已经声明了 Intent.ActionPick 类型之后我需要这样做,但是嘿它可以工作并且不再抛出错误。
【讨论】:
然后在旧的 KitKat 设备上运行此代码时,我收到了权限错误。所以计算出 Intent.ActionPick 应该改为 Intent.ActionGetContent - 现在权限问题已解决,原始问题也已解决!以上是关于Xamarin Android 应用程序因“意图必须包含显式包名称来构建 android-app”而崩溃的主要内容,如果未能解决你的问题,请参考以下文章
xamarin ios 应用程序因 CBCentralManager 崩溃
Xamarin.forms(或)xamarin.ios/xamarin.android(或)本机