我的相机意图在返回时杀死片段

问题描述

自从我将 Samsung galaxy Tab A 10.1 (2019) 2Gb 更新为 android 10 后,我的相机意图在返回照片时会重新启动我的应用程序/杀死我的片段。 问题不一致,有时我可以拍 10 张照片没有问题,因为应用程序以 1 张照片重新启动。

我想知道是否有人已经遇到过同样的问题,并且他们是否设法找到了解决方案。

这是我开始相机意图的地方

File imageDirectory = new File(user.getimageCacheDirectoryPath() + "/pole/" + pole.getId() + "/");      

if (!imageDirectory.exists())
    imageDirectory.mkdirs();

String fname = "/photo_" + foto + "_pre.jpg";
tempImageFile = new File(imageDirectory + fname);

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

if (tempImageFile.exists()) {
    tempImageFile.delete();
}

mImageCaptureUri = FileProvider.getUriForFile(getActivity(),BuildConfig.APPLICATION_ID + ".provider",tempImageFile);
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,mImageCaptureUri);
intent.putExtra("return-data",true);

if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
    List<ResolveInfo> resInfoList = getActivity().getPackageManager().queryIntentActivities(intent,PackageManager.MATCH_DEFAULT_ONLY);
    for (ResolveInfo resolveInfo : resInfoList) {
        String packageName = resolveInfo.activityInfo.packageName;
        getActivity().grantUriPermission(packageName,mImageCaptureUri,Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
    }
}

startActivityForResult(intent,REQUEST_IMAGE_CAPTURE);

这在 onActivityResult 中。

注意:调试器永远不会达到这个。

@Override
    public void onActivityResult(int requestCode,int resultCode,Intent data) {
        super.onActivityResult(requestCode,resultCode,data);
        if (resultCode == Activity.RESULT_OK) {
            switch (requestCode){
                case REQUEST_IMAGE_CAPTURE:
                    try {
                        BitmapFactory.Options options = new BitmapFactory.Options();
                        options.inSampleSize = 2;

                        InputStream input = getActivity().getContentResolver().openInputStream(mImageCaptureUri);
                        Bitmap imageBitmap = BitmapFactory.decodeStream(input,null,options);
                        imageBitmap = Utils.rotateImageIfrequired(imageBitmap,tempImageFile.getPath());
                        imageBitmap = Bitmap.createScaledBitmap(imageBitmap,1100,1400,true);
                        saveImage(imageBitmap);

                    } catch (NullPointerException e) {
                        e.printstacktrace();
                    } catch (IOException e) {
                        e.printstacktrace();
                    }
                    break;
            }

        }
    }

解决方法

这在 Activity 生命周期中是预期的,如果它愿意,Android 可能会杀死 backstack Activity 并尝试从 onSaveInstanceState 和 onRestoreInstanceState 重建它,如果你实现这两个,你可以安全地避免状态的丢失和恢复