【问题标题】:Camera onActivityResult on fragment片段中的相机 onActivityResult
【发布时间】:2014-11-06 15:52:46
【问题描述】:

我正在编写一些其他人编写的代码,但在处理相机意图的结果时遇到了问题。

基本上,我有一个 DashBoardActivity,其中包含一个选项卡,其中包含一个名为“MyProfileContainer”的片段,其中包含一个“SettingsFragment”片段,其中包含一个“EditProfileFragment”片段。

在 EditProfileFragment 中,用户可以为他的个人资料拍照。它可以工作,但它在仪表板活动上调用 onActionResult。

我阅读了一些关于如何将其重定向到 EditProfileFragment 的指南,但我无法做到。 我在这件事上浪费了几天时间,我想不通。

这是 Dashboard Activity 上的 onActivityResult

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
}

这是 EditProfileFragment

private  Uri imageUri = null;

public void captureImage() {

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    File photo = new File(Environment.getExternalStorageDirectory(),  "Pic.jpg");
    intent.putExtra(MediaStore.EXTRA_OUTPUT,
            Uri.fromFile(photo));
    imageUri = Uri.fromFile(photo);
    getParentFragment().startActivityForResult(intent, 100);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

            if (requestCode == 100 && resultCode == Activity.RESULT_OK) {
                Uri selectedImage = imageUri;
                getActivity().getContentResolver().notifyChange(selectedImage, null);
                ContentResolver cr = getActivity().getContentResolver();
                Bitmap bitmap;
                try {
                    bitmap = android.provider.MediaStore.Images.Media
                            .getBitmap(cr, selectedImage);

                    profilePhoto.setImageBitmap(bitmap);
                    Toast.makeText(getActivity(), selectedImage.toString(),
                            Toast.LENGTH_LONG).show();
                } catch (Exception e) {
                    Toast.makeText(getActivity(), "Failed to load", Toast.LENGTH_SHORT)
                            .show();
                    Log.e("Camera", e.toString());
                }
            }

}

我不知道我是否必须在这两者之间的每个类上重写该方法,或者我是否做错了其他事情,但我确信 EditProfileFragment onActivityResult 永远不会被调用。

【问题讨论】:

    标签: android android-intent android-fragments camera fragment


    【解决方案1】:

    我发现了问题,其实是安卓的bug。

    要接收结果的片段是嵌套在其他片段中的片段,并且方法调用没有正确地传播得那么深。

    我必须手动覆盖包含片段上的方法并且它有效。

    【讨论】:

      【解决方案2】:

      在嵌套片段中调用 OnActivityResult 的简单技巧。

      1) 在您的 captureImage 方法中添加此代码,它将启动一个新活动。

      Intent 意图 = new Intent(getContext(), CameraPreviewActivity.class);

      startActivityForResult(intent, 111);

      2) 现在CameraPreviewActivity 活动将打开,它将启动相机活动并将结果返回给片段。

      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
          startActivityForResult(intent, FragmentAccPhoto.REQUEST_IMAGE_CAPTURE);
      }
      
      public void onActivityResult(int requestCode, int resultCode, Intent data) {
          super.onActivityResult(requestCode, resultCode, data);
          setResult(RESULT_OK, data);
          finish();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-20
        • 1970-01-01
        • 2013-12-01
        • 2019-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多