【问题标题】:My Camera intent kills fragment when returning返回时我的相机意图杀死片段
【发布时间】:2021-03-02 16:08:28
【问题描述】:

自从我将 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;
            }

        }
    }

【问题讨论】:

  • “我的相机意图重新启动我的应用程序/杀死我的片段” - 这通常表示您的应用程序已经崩溃。插入您的设备并尝试再次复制问题,然后在此处发布您的崩溃日志
  • @user3170251 pastebin.com/AuwrSReu 这是运行日志。 E/CustomCameraError 标记相机意图的开始。没有崩溃设备返回到我的 mainActivity 杀死了我之前的片段。

标签: android android-camera-intent android-10.0


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    • 2016-03-03
    相关资源
    最近更新 更多