android新版本的拍照并保存系统相册功能

在android7.0以上版本传统的拍照功能代码要作改变,特别是传统的uri被认为是不安全的,要通过FileProvider封装uri

            Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);File file=new File(TEMP_IMAGE_PATH);
            file.createNewFile();
            photoUri=Uri.fromFile(file);
            if (Build.VERSION.SDK_INT>=24)
            photoUri=FileProvider.getUriForFile(this,"com.example.aa.puzzle.fileProvider",file);
            intent.putExtra(MediaStore.EXTRA_OUTPUT,photoUri);
	<provider
            android:authorities="com.example.aa.puzzle.fileProvider"
            android:name="android.support.v4.content.FileProvider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data android:name="android.support.FILE_PROVIDER_PATHS"
                 android:resource="@xml/image_paths"/>
        </provider>
android:authorities 是用来标识provider的唯一标识,和前面的代码对应,granUriPermissions用来控制共享文章的访问权限

在res新建文件夹xml,新建文件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=""/>
</paths>
同时由于我的手机没有sd卡,特意去了解了直接存在系统相册的方法

String TEMP_IMAGE_PATH=Environment.getExternalStorageDirectory().getPath()+"/puzzle/";
前面的函数可以获取到手机存储的目录,下面那个文件夹可以新建也可以直接放在已有的文件比如Camera,我这里是放在新建

文件夹puzzle

            new File(TEMP_IMAGE_PATH).mkdir();//新建文件夹
            TEMP_IMAGE_PATH=TEMP_IMAGE_PATH+"image.png";//补全路径,建议用时间戳或随机函数
            File file=new File(TEMP_IMAGE_PATH);
            file.createNewFile();
然后通过第一段代码吧file通过FileProvider转为uri,再传给 MediaStore.EXTRA_OUTPUT

还需要添上这句话更新相册

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + TEMP_IMAGE_PATH)));
当然,还有第二种方法可以把照片保存到相册

MediaStore.Images.Media.insertImage(getContentResolver(),bitmap,String.valueOf(Math.random())+"image","image");
不过这种不能修改存放地址,还要加上一句:
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY,1);
防止被压缩。



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值