C# 使用相机时未调用OnActivityResult()?
我正在尝试在我的Xamarin.Android应用程序中创建一个有按钮的页面(我们称之为第2页),当你按下该按钮时,相机应用程序就会打开。然后你拍了一张照片,接受了你拍的照片,然后你应该回到原来有摄像头按钮的页面(第2页),你拍摄的图像将显示在按钮下 问题是,在您接受图片后,我的重写OnActivityResult()方法永远不会被调用。你按下按钮,相机应用程序打开,你拍照,接受照片,相机应用程序关闭,你回到相机按钮页面之前的页面(因此你现在在第1页)。我认为相机应用程序本身正在崩溃?我不知道如何找到那些日志。有时,弹出窗口会显示“不幸的是,相机停止了”。我猜这就是我试图将拍摄的照片保存到手机本身的方式?我看到的唯一错误是在设备日志中,有时它会抛出一个权限错误,说我没有权限写入手机上的存储设备,但我在清单文件中有“写入”权限。我的目标是API 26 有什么想法吗 以下是单击按钮的方法:C# 使用相机时未调用OnActivityResult()?,c#,android,android-intent,android-activity,xamarin.android,C#,Android,Android Intent,Android Activity,Xamarin.android,我正在尝试在我的Xamarin.Android应用程序中创建一个有按钮的页面(我们称之为第2页),当你按下该按钮时,相机应用程序就会打开。然后你拍了一张照片,接受了你拍的照片,然后你应该回到原来有摄像头按钮的页面(第2页),你拍摄的图像将显示在按钮下 问题是,在您接受图片后,我的重写OnActivityResult()方法永远不会被调用。你按下按钮,相机应用程序打开,你拍照,接受照片,相机应用程序关闭,你回到相机按钮页面之前的页面(因此你现在在第1页)。我认为相机应用程序本身正在崩溃?我不知道如
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()的问题。在我宣布的班级的最上面
[Activity(Label = "@string/page_name", ScreenOrientation = ScreenOrientation.Portrait, NoHistory = true)]
这里重要的一点是“NoHistory=True”,这显然会使页面退出并返回到上一页。删除“NoHistory=true”有效,并使其能够调用OnActivityResult()。关于它的一些文档说,“值'true'意味着活动不会留下历史跟踪。它不会保留在任务的活动堆栈中,因此用户将无法返回到它。”所以我想这是有道理的。您的意思是在OnActivityResult()中有一个if(resultCode!=Result.Ok)?代码根本不会进入OnActivityResult()方法。所以我无法检查if()语句。我测试了您提供的代码。捕获图像并选择勾号后,将触发激活结果。@WendyZang MSFT right,它将被触发。但对我来说,它不会被触发。