//相机权限
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
String[] mStatenetwork = new String[]{
//写的权限
Manifest.permission.WRITE_EXTERNAL_STORAGE,
//读的权限
Manifest.permission.READ_EXTERNAL_STORAGE,
//入网权限
Manifest.permission.ACCESS_NETWORK_STATE,
//WIFI权限
Manifest.permission.ACCESS_WIFI_STATE,
//读手机权限
Manifest.permission.READ_PHONE_STATE,
//网络权限
Manifest.permission.INTERNET,
//相机
Manifest.permission.CAMERA,
Manifest.permission.WRITE_APN_SETTINGS,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.ACCESS_NETWORK_STATE,
};
ActivityCompat.requestPermissions(this,mStatenetwork,100);
}else{
做你想做的的事情
例如:弹出选择相机或相册
请求相机
在这里,我就先分开写了,写到了下面,
由于时间问题,我直接写点击时间了
}
//没有权限的话负责打开权限
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
boolean hasPermission = false;
if(requestCode == 100){
for (int i = 0;i<grantResults.length;i++){
if(grantResults[i] == -1){
hasPermission = true;
}
}
}
}
private final int REQUEST_PICK = 200;
private final int REQUEST_CAMEAR = 100;
private final int REQUEST_PICTRUE = 300;
private final String PATH_FILE=Environment.getExternalStorageDirectory()+"/file.png";
private final String path =Environment.getExternalStorageDirectory()+ "/image.png";
//相册点击事件
mapdepot.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, REQUEST_PICK);
popupWindow.dismiss();
}
});
相机点击事件
camera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(path)));
//intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION |Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
startActivityForResult(intent, REQUEST_CAMEAR);
popupWindow.dismiss();
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CAMEAR && resultCode == RESULT_OK) {
//打开裁剪
Intent intent = new Intent("com.android.camera.action.CROP");
//将图片设置给裁剪
intent.setDataAndType(Uri.fromFile(new File(path)), "image/*");
//设置是否支持裁剪
intent.putExtra("CROP", true);
//设置宽高比
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
//设置输出后图片大小
intent.putExtra("outputX", 100);
intent.putExtra("outputY", 100);
//返回到data
intent.putExtra("return-data", true);
//启动
startActivityForResult(intent, REQUEST_PICTRUE);
}
if (requestCode == REQUEST_PICK && resultCode == RESULT_OK) {
//打开裁剪
Intent intent = new Intent("com.android.camera.action.CROP");
Uri uri = data.getData();
//将图片设置给裁剪
intent.setDataAndType(uri, "image/*");
//设置是否可裁剪
intent.putExtra("CROP", true);
//设置宽高比
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
//设置输出
intent.putExtra("outputX", 100);
intent.putExtra("outputY", 100);
//返回data
intent.putExtra("return-data", true);
startActivityForResult(intent, REQUEST_PICTRUE);
}
//获取剪切完的图片数据 bitmap
if (requestCode == REQUEST_PICTRUE && resultCode == RESULT_OK) {
Bitmap bitmap =data.getParcelableExtra("data");
try {
//我的工具类里的一个方法
VerifyUtils.getInstance().saveBitmap(bitmap,PATH_FILE,50);
} catch (IOException e) {
e.printStackTrace();
Log.i("TAG",e.getMessage());
}
//我下面的是请求网络,你们可以拿到上面的birmap直接设置给图片
Map<String,String> map=new HashMap<>();
map.put("image",PATH_FILE);
iPersenter.startRequestPostFile(Apis.UPDATE_HEAD_URL,map,AddressBean.class);
}
我的工具类里的一个方法
public static void saveBitmap(Bitmap bitmap, String path, int quality) throws IOException {
String dir = path.substring(0, path.lastIndexOf("/"));
File dirFile = new File(dir);
if (!dirFile.exists() || !dirFile.isDirectory()) {
try {
if (!dirFile.mkdirs()) {
return;
}
} catch (Exception e) {
Log.e("TAG", e.getMessage());
}
}
FileOutputStream out;
try {
out = new FileOutputStream(path);
if (bitmap.compress(Bitmap.CompressFormat.PNG, quality, out)) {
out.flush();
out.close();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
Log.e("TAG", e.getMessage());
} catch (IOException e) {
e.printStackTrace();
}
}