使用相机意图时未调用 OnActivityResult()?
Posted
技术标签:
【中文标题】使用相机意图时未调用 OnActivityResult()?【英文标题】:OnActivityResult() not being called when using a Camera intent? 【发布时间】:2021-08-22 20:43:44 【问题描述】:我正在尝试在我的 Xamarin.android 应用程序中创建一个具有按钮的页面(我们称之为第 2 页),当您按下该按钮时,相机应用程序将打开。然后你拍照,接受你拍的照片,然后你应该回到原来有相机按钮的页面(第2页),你拍的图像会显示在按钮下面。
问题是我的重写 OnActivityResult() 方法在您接受图片后永远不会被调用。您按下按钮,相机应用程序打开,您拍照,接受照片,相机应用程序关闭,您将返回到相机按钮页面之前的页面(因此您现在位于第 1 页)。我认为相机应用程序本身正在崩溃?我不确定如何找到这些日志。有时会弹出一个窗口显示“不幸的是,相机已停止”。我猜这是我试图将拍摄的照片保存到手机本身的方式?我看到的唯一错误是在设备日志中,偶尔它会抛出一个权限错误,说我无权写入手机上的存储设备,但我在清单文件中有“写”权限。我的目标是 API 26。
有什么想法吗?
点击按钮的方法如下:
private int PIC_REQUEST_CODE = 1;
private ImageView imageView;
private Java.IO.File image;
private void Button_Click(object sender, EventArgs e)
Intent takePictureIntent = new Intent(MediaStore.ActionImageCapture);
if (takePictureIntent.ResolveActivity(PackageManager) != null)
try
// Create an image file name
string timeStamp = DateTime.Now.ToString("yyyyMMdd_HHmmss");
string imageFileName = "JPEG_" + timeStamp + "_";
Java.IO.File storageDir = GetExternalFilesDir(global::Android.OS.Environment.DirectoryPictures);
Java.IO.File image = Java.IO.File.CreateTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
global::Android.Net.Uri photoURI = FileProvider.GetUriForFile(ApplicationContext, PackageName + ".fileprovider", image);
takePictureIntent.PutExtra(MediaStore.ExtraOutput, photoURI);
takePictureIntent.AddFlags(ActivityFlags.GrantWriteUriPermission);
StartActivityForResult(takePictureIntent, PIC_REQUEST_CODE);
catch (Exception ex)
//Not sure what to do, but here's a break point at least.
Toast.MakeText(this, "blah blah something went wrong", ToastLength.Short).Show();
这是我的简单 OnActivityResult 被跳过/从未调用过:
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
if (requestCode == PIC_REQUEST_CODE && resultCode == Result.Ok)
Bitmap bitmap = (Bitmap)data.Extras.Get("data");
imageView.SetImageBitmap(bitmap);
【问题讨论】:
您的意思是在 OnActivityResult() 中有一个 if(resultCode != Result.Ok) 吗?代码永远不会进入 OnActivityResult() 方法根本。所以我无论如何都无法检查 if() 语句。 我测试了您提供的代码。捕获图像并选择勾号后,将触发OnActivityResult
。
@WendyZang-MSFT 是的。但它不会为我触发。
【参考方案1】:
我发现当前没有调用 OnActivityResult() 的问题。在我声明的类的顶部
[Activity(Label = "@string/page_name", ScreenOrientation = ScreenOrientation.Portrait, NoHistory = true)]
这里的重要说明是“NoHistory=True”显然使页面退出并返回到前一页。删除“NoHistory = true”有效并使其调用 OnActivityResult()。关于它的一些文档说“'true'的值意味着活动不会留下历史痕迹。它不会保留在任务的活动堆栈中,因此用户将无法返回它”所以我猜这是有道理的。
【讨论】:
以上是关于使用相机意图时未调用 OnActivityResult()?的主要内容,如果未能解决你的问题,请参考以下文章