我分两个模块说吧:
1、就是单纯的调用手机系统拍照功能,然后获取图片
具体的代码如下
//发送隐士意图给手机系统,调用起android本地相机
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQUEST_CODE);
//之后在activity中复写onActivityResult方法
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode==REQUEST_CODE){ //判断request code
Bundle mbundle=data.getExtras();
Bitmap bitmap= (Bitmap) mbundle.get("data");
}
但是有个问题就是,上面的这种最原始的方法请求到的是缩略图!,但是我的项目要求的是原图,这个时候就
开始了今天的主题:
2、保存图片到文件里面,然后通过读取文件获取原图:
android6.0以上记得动态的请求权限
//android 6.0以上动态获取请求权限 由于我的camer权限还有READ_EXTERNAL_STORAGE是在别的地方已经请求了,所以我这边只是写了写文件的权限,希望大家注意点
if ((ContextCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED)) {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQUEST_STORAGE_WRITE_ACCESS_PERMISSION);
}
File mFile=new File(Environment.getExternalStorageDirectory(),"pic.jpg");
if(currentVersion>24){//这边注意,因为7.0之后不能直接通过uri = Uri.fromFile(mFile);获取
不然会报错android.os.FileUriExposedException: xposed beyond app through ClipData.Item..
uri=FileProvider.getUriForFile(this,"com.demo.camera",target);
}else{
uri = Uri.fromFile(target);
}
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, REQUEST_CODE);
//之后直接在onActivityResult获取即可
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
FileInputStream fis = new FileInputStream(Environment.getExternalStorageDirectory()+ "pic.jpg");
Bitmap bitmap = BitmapFactory.decodeStream(fis);
}
uri=FileProvider.getUriForFile(this,"com.demo.camera",target);注意这块,这个需要在清单文件中进行配置
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.demo.camera"//对应FileProvider.getUriForFile第二个参数
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
然后新建一个file_paths在xml文件下,如果没有请新建一个
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path
name="my_images"
path="." />
<root-patch //root权限,不然会报错java.lang.IllegalArgumentException: Failed to find configured root that
name="root-patch"
path="." />
</paths>
这样就能在指定的目录下找打图片了,希望能帮到大家!