当前位置: 首页 > 知识库问答 >
问题:

取回照片时相机崩溃

水渊
2023-03-14

我正在尝试允许用户用相机应用程序拍摄一张照片,然后在应用程序中显示它的预览。

我还需要在应用程序的稍后阶段访问该文件(但这不是一个问题)

我有以下崩溃:

Permission Denial: opening provider android.support.v4.content.FileProvider from ProcessRecord{41f55850 10769:com.sec.android.app.camera/u0a84} (pid=10769, uid=10084) that is not exported from uid 10119
    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="${applicationId}.provider"
        android:exported="false"
        android:grantUriPermissions="true">

        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths" />
    </provider>
<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path
        name="my_images"
        path="Android/data/com.example.app/files/Pictures" />
</paths>
    private File setUpPhotoFile() throws IOException {
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date());
    String imageFileName = "IMG_" + timeStamp + "_";
    File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
    File image = File.createTempFile(
            imageFileName,  /* prefix */
            ".jpg",   /* suffix */
            storageDir      /* directory */
    );
    return image;
}
if (isCameraApplicationAvailable(PhotoActivity.this)) {
                Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);


                File f = null;
                try {
                    f = setUpPhotoFile();
                    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, FileProvider.getUriForFile(PhotoActivity.this, BuildConfig.APPLICATION_ID + ".provider", f));
                } catch (IOException e) {
                   // Handle exception
                }
                List<ResolveInfo> resolvedIntentActivities = getPackageManager().queryIntentActivities(takePictureIntent, PackageManager.MATCH_DEFAULT_ONLY);
                for (ResolveInfo resolvedIntentInfo : resolvedIntentActivities) {
                    String packageName = resolvedIntentInfo.activityInfo.packageName;

                    grantUriPermission(packageName, Uri.fromFile(f), Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
                }
                takePictureIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                startActivityForResult(takePictureIntent, ACTION_TAKE_PHOTO);
            }

完成时处理图像:

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == ACTION_TAKE_PHOTO && resultCode == Activity.RESULT_OK) {
        handleCameraPhoto();
    }
}

我不明白为什么它只是4.4.4的问题,而不是其他操作系统。

当出现崩溃时,它并没有说我的应用程序崩溃了,它说Camera已经停止工作了,并且我只能在没有过滤器的情况下查看日志时查看崩溃,这意味着崩溃不在我的应用程序中?

共有1个答案

东郭远航
2023-03-14

根据@mikem的注释,我使用uri.fromfile(file)而不是使用fileprovider来获取URI。

是这样做的:

grantUriPermission(packageName, Uri.fromFile(f), Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);

当我本该这么做的时候:

grantUriPermission(packageName, FileProvider.getUriForFile(PhotoActivity.this, BuildConfig.APPLICATION_ID + ".provider", f), Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
 类似资料:
  • 我是android studio和手机应用程序开发的初学者,但我仍在努力学习。因此,我设法构建了我的第一个webview应用程序来显示页面和图片。我发现了许多有用的资源来帮助我这样做,但我仍然面临着一个问题,即如何直接上传从手机摄像头(而不是从图库)拍摄的照片并上传到服务器。 1-在我按下眉毛按钮后,应用程序会提示我是从相机还是从画廊拍摄照片。(Android版9)2-当我从图库上传一张照片时,应

  • 我是Android的新手。我正在我的Android应用程序中创建ImageUpload活动,但它在Apk(23)下运行良好。但每当我在AndroidMarshmallow上尝试它时,点击图片后它就会崩溃。 这是日志 java.lang.RuntimeException:将结果ResultInfo{who=null,request=1,result=-1,data=intent{}}传递到活动{co

  • 本文向大家介绍iOS开发-调用系统相机和相册获取照片示例,包括了iOS开发-调用系统相机和相册获取照片示例的使用技巧和注意事项,需要的朋友参考一下 前言:相信大家都知道大部分的app都是有我的模块的,而在我的模块基本都有用户的头像等信息,并且是可以更改头像的。那么今天小编给大家简单介绍一下iOS开发中如何调用系统相机拍照或者相册获取照片。要获取系统相机或者相册,我们需要使用到 UIImagePic

  • 本文向大家介绍Android拍照和获取相册图片,包括了Android拍照和获取相册图片的使用技巧和注意事项,需要的朋友参考一下 之前遇到各种拍照啊,获取相册图片之类,都是直接去度娘,要么之前的代码复制下,没好好总结过。  再也不要问度娘了,再也不用一堆博客里找啊找了。。。  ----------------------------------------------我是正文的分割线--------

  • 我正在尝试使用在Flutter上,它在Android模拟器上运行完美。但是当我尝试在我的真实设备上使用它时,当我点击按钮打开相机时,它崩溃了,没有给出任何错误。我该如何解决它?我的手机是Android(小米8)。 我的代码:

  • 我正在我的应用程序中使用CameraX API。我已经将预览用例和ImageAnalysis用例绑定到活动生命周期,如 该应用程序大部分时间都可以工作,但会随机崩溃以下日志 2020-01-17 11:24:47.411 6581-6614/com。我的应用程序D/摄像头:重置捕获会话 2020-01-17 11:24:47.411 6581-6614/com.my.appD/相机:关闭状态下的释