好吧,我承认我被相机坑了…Android辣么多机型都是什么鬼…呜呜
问题一
需要调用系统相机,可是camer权限在Android6.0以后属于危险系列的,所以直接调用可能会有问题。所以调用之前需要先进行权限判断…调用的界面设计如下:
点击拍照的时候有的机型会提示无摄像头权限,有的机型不会提醒而直接崩掉,解决如下:
A、调用的时候判断有无权限
if (PackageManager.PERMISSION_GRANTED == getActivity().getPackageManager().checkPermission("android + ".permission.CAMERA", "cn.your.apppackagename")){
//拥有权限的处理
}else{
//没有拥有权限的处理
}
B、相机权限有了,但是系统会进行询问,询问的时候选择拒绝,依旧需要进行判断(方法是自己网上找的,经测试正确)
/**
* 当前摄像头能否被使用
*
* @return
*/
public boolean isCameraCanUse() {
boolean canUse = true;
Camera mCamera = null;
try {
mCamera = Camera.open(0);
mCamera.setDisplayOrientation(90);
} catch (Exception e) {
canUse = false;
}
if (canUse) {
mCamera.release();
mCamera = null;
}
return canUse;
}
为了给用户更好的体验,在检查无自己需要的权限的时候,会弹出框提示“去设置权限”,代码如下:
AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
builder.setTitle(R.string.app_name).setMessage("当前无摄像头权限").setPositiveButton("去设置", new
DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 跳转到系统的网络设置界面
Intent intent = new Intent();
intent.setAction("android.intent.action.MAIN");
intent.setClassName("com.android.settings", "com.android.settings.ManageApplications");
mActivity.startActivity(intent);
}
}).setNegativeButton("暂不设置", null).show();
不管是 相机 还是 相册 都需要进行权限的判断,有些机型可能没有读写权限,仍旧需要自己判断。完整的代码判断如下:
//拍照
mTvTakephoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (PackageManager.PERMISSION_GRANTED == getActivity().getPackageManager().checkPermission("android"
+ ".permission.CAMERA", "cn.your.apppackagename")) {
if (isCameraCanUse()) {
//调用相机拍照
Intent camareIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
camareIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment
.getExternalStorageDirectory(), "head.jpg")));
startActivityForResult(camareIntent, TAKEPHOTOCODE);
} else {
Toast.makeText(mActivity, "相机权限被拒绝", Toast.LENGTH_SHORT).show();
}
} else {
AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
builder.setTitle(R.string.app_name).setMessage("当前无摄像头权限").setPositiveButton("去设置", new
DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 跳转到系统的网络设置界面
Intent intent = new Intent();
intent.setAction("android.intent.action.MAIN");
intent.setClassName("com.android.settings", "com.android.settings.ManageApplications");
mActivity.startActivity(intent);
}
}).setNegativeButton("暂不设置", null).show();
}
}
});
/**
* 当前摄像头能否被使用
*
* @return
*/
public boolean isCameraCanUse() {
boolean canUse = true;
Camera mCamera = null;
try {
mCamera = Camera.open(0);
mCamera.setDisplayOrientation(90);
} catch (Exception e) {
canUse = false;
}
if (canUse) {
mCamera.release();
mCamera = null;
}
return canUse;
}
自己遇到的时候有点无语,发现总结出来竟然就那么一点点代码,额,离大神辣么辣么远