使用方法
在build.gradle文件中添加远程依赖:
compile 'com.sobot.camera:camera_tools:1.2'
在MainActivity的布局文件中添加以下view
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="2">
<Button
android:id="@+id/btn_take_picture"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="相册" />
<Button
android:id="@+id/btn_take_picture_camera"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="相机" />
</LinearLayout>
<TextView
android:text="上面从相册或者相机获取的图片会显示在线面ImageView上"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/camera_demo_imageView"
android:layout_width="match_parent"
android:layout_height="200dp" />
在MainActivity类中添加以下五个属性
private ImageView imgView;//用来显示 获取到的图片或者拍照的图片
protected boolean has_camera_permission = false;//是否有使用相机权限
protected boolean has_write_external_storage_permission = false;//是否有存储权限
//申请权限的code
int SOBOT_CAMERA_REQUEST_CODE = 191;
int SOBOT_WRITE_EXTERNAL_STORAGE_REQUEST_CODE = 192;
在MainActivity的onCreate方法中添加以下代码
has_camera_permission = checkPermission(this, Manifest.permission.CAMERA, SOBOT_CAMERA_REQUEST_CODE);
has_write_external_storage_permission = checkPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE, SOBOT_WRITE_EXTERNAL_STORAGE_REQUEST_CODE);
if (!has_camera_permission || !has_write_external_storage_permission) {
return;
}
imgView = findViewById(R.id.camera_demo_imageView);
findViewById(R.id.btn_take_picture).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
CameraUtils.selectPicFromLocal(MainActivity.this);
}
});
findViewById(R.id.btn_take_picture_camera).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
CameraUtils.selectPicFromCamera(MainActivity.this);
}
});
在MainActivity类中添加以下两个方法
/**
* 检查6.0 动态权限
* @param act activity
* @param type 权限类型
* @param code 返回码
* @return 是否有权限
*/
public static boolean checkPermission(Activity act, String type, int code){
boolean isPermission;
if(getTargetSdkVersion(act.getApplicationContext()) >= 23){
if (ContextCompat.checkSelfPermission(act, type)
!= PackageManager.PERMISSION_GRANTED) {
isPermission=false;
//申请权限
ActivityCompat.requestPermissions(act, new String[]{type}, code);
} else {
isPermission = true;
}
} else {
isPermission = true;
}
return isPermission;
}
//获取当前版本targetSdkVersion
public static int getTargetSdkVersion(Context context){
int targetSdkVersion = 0;
try {
final PackageInfo info = context.getPackageManager().getPackageInfo(
context.getPackageName(), 0);
targetSdkVersion = info.applicationInfo.targetSdkVersion;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return targetSdkVersion;
}
在MainActivity类中重写onActivityResult(int requestCode, int resultCode, Intent data)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.i("多媒体返回的结果-------", requestCode + "==========" + resultCode + "========" + data);
if (resultCode == RESULT_OK) {
if (requestCode == CameraUtils.REQUEST_CODE_picture) { // 发送本地图片
if (data != null && data.getData() != null) {
imgView.setImageURI(data.getData());//把图片设置到ImageView上
Uri selectedImage = data.getData();
// 通知handler更新图片
Log.i("本地文件路径----", selectedImage.getPath());
} else {
Log.i("本地文件路径----", "没有");
}
} else if (requestCode == CameraUtils.REQUEST_CODE_makePictureFromCamera) {
if (CameraUtils.cameraFile != null && CameraUtils.cameraFile.exists()) {
imgView.setImageURI(Uri.fromFile(CameraUtils.cameraFile));
Log.i("拍照文件---------", CameraUtils.cameraFile.getPath());
} else {
Log.i("拍照文件---------", "没有");
}
}
}
}