簡體   English   中英

使用相機意圖時未調用 OnActivityResult()?

[英]OnActivityResult() not being called when using a Camera intent?

我正在嘗試在我的 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() 沒有被調用的當前問題。 在 class 上方我聲明

[Activity(Label = "@string/page_name", ScreenOrientation = ScreenOrientation.Portrait, NoHistory = true)]

這里的重要說明是“NoHistory=True”顯然使頁面退出並返回到上一頁。 刪除“NoHistory = true”有效並使其調用 OnActivityResult()。 關於它的一些文檔說“'true'的值意味着活動不會留下歷史痕跡。它不會保留在任務的活動堆棧中,因此用戶將無法返回它”所以我猜那講得通。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM