ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

跪求大神帮忙解决以下android手机拍照功能的问题,使用provider会导致APP打开时闪退,进不去

2019-08-15 21:38:09  阅读:275  来源: 互联网

标签:拍照 大神 APP provider android 时闪退 outputImage


跪求大神帮忙解决以下android手机拍照功能的问题,使用provider会导致APP打开时闪退,进不去!!1

在Manifest中添加了provider和相机对应的用户权限:

  <application
    <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="com.example.myapplication.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths"/>
    </provider>
</application>

 <uses-permission android:name="android.permission.CAMERA" />
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

在MainActivity的onCreate中监听进入拍照功能的按钮(mTakePhoto)是否被按下

 mTakePhoto.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//          //以下是最开始使用provider的拍照代码,在Manifest中加了provider后会导致APP闪退,注释掉provider后可以进入APP,但点击拍照按钮后也会闪
//                //创建file对象,用于存储拍照后的图片;
               File outputImage = new File(getExternalCacheDir(), "output_image.jpg");
               try {
                    if (outputImage.exists()) {
                        outputImage.delete();
                    }
                    outputImage.createNewFile();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                if (Build.VERSION.SDK_INT >= 24) {
                //兼容android7.0 使用共享文件的形式
                    imageUri = FileProvider.getUriForFile(MainActivity.this,
                            "com.example.myapplication.fileprovider", outputImage);
                } else {
                    imageUri = Uri.fromFile(outputImage);
                }
                //启动相机程序
                Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
                intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri );
                startActivityForResult(intent, TAKE_PHOTO);
            }
        });

在下面这个目录下创建了file_path.xml文件,文件内容见下方代码
在这里插入图片描述

<?xml version = "1.0" encoding = "utf-8"?>
<paths xmlns:android = "http://schemas.android.com/apk/res/android">
    <external-path name = "my_images" path = "/sdcard/DCIM/camera"></external-path>
    </paths>

APP的界面如下图,忽略其他功能,只需看take_photo,正常的逻辑是点击该按钮进入相机功能,但如果如上述添加provider,根本连APP都打不开,这个页面是在manifest中注释掉provider那一段代码后才能看到的,但点击take_photo又会闪退,不知道是哪里错了,还请各位大神赐教。这是我第一次搞android开发,以前完全没接触过,代码也都是按照网上的方法弄的,请大神们解释的时候说详细点,谢谢!
在这里插入图片描述

标签:拍照,大神,APP,provider,android,时闪退,outputImage
来源: https://blog.csdn.net/kuangling1212/article/details/99656128

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有