java—如何从“action\u image\u capture”的活动结果获取路径?

ctrmrzij  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(307)

我创建了一个活动,它使用默认的相机应用程序拍照。我使用了本教程中的代码:https://developer.android.com/training/camera/photobasics#taskpath
我创造了这样的意图:

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

然后我设置输出的路径:

takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, currentPhotoPath);

在教程中,它们保存 currentPhotoPath 活动中的私有变量。我想避免这一点,并从中的意图得到路径 onActivityResult 函数,此处:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);

    if (requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_OK) {
        // How to access the path here?
    }
}

我试过了 intent.getStringExtra(MediaStore.EXTRA_OUTPUT) ,但返回null。
我希望避免将路径存储在类成员中,因为android系统可能会销毁并重新创建活动,然后该变量将为null。
我发现了一个类似的问题,但答案是针对android2的,它们使用了不推荐的api,比如 managedQuery .

ozxc1zmp

ozxc1zmp1#

我想避免这种情况,并从onactivityresult函数的intent获取路径,在这里
那是不可能的,对不起。它需要重写每一个相机应用程序。
我希望避免将路径存储在类成员中,因为android系统可能会销毁并重新创建活动,然后该变量将为null。
将其保存到已保存的示例状态 Bundle . 这个示例应用程序有点旧,但它演示了基本技术。保存 FileonSaveInstanceState() :

@Override
  protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    outState.putSerializable(EXTRA_FILENAME, output);
  }

…把它放回去 onCreate() ,如果
savedInstanceState Bundle 不是 null :

output=(File)savedInstanceState.getSerializable(EXTRA_FILENAME);

相关问题