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);
	
            
        
android:authorities 是用来标识provider的唯一标识,和前面的代码对应,granUriPermissions用来控制共享文章的访问权限

在res新建文件夹xml,新建文件path.xml



    
同时由于我的手机没有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);
防止被压缩。



你可能感兴趣的:(android)