android7.0 调用相册,android7.0以上调用相机和相册

在Fragment中使用时回传要放到嵌套Fragment的Activity里面

private static final int CODE_GALLERY_REQUEST = 0xa0;

private static final int CODE_CAMERA_REQUEST = 0xa1;

private static final int CODE_RESULT_REQUEST = 0xa2;

private static final int CAMERA_PERMISSIONS_REQUEST_CODE = 0x03;

private static final int STORAGE_PERMISSIONS_REQUEST_CODE = 0x04;

/**

* 自动获取相机权限

*/

private void autoObtainCameraPermission() {

if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED

|| ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {

if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {

ToastUtils.show("您已经拒绝过一次");

}

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE}, CAMERA_PERMISSIONS_REQUEST_CODE);

} else {//有权限直接调用系统相机拍照

if (hasSdcard()) {

fileUri = new File(getExternalCacheDir() + "/photo.jpg");

try {

if (fileUri.exists()) {

fileUri.delete();

}

fileUri.createNewFile();

} catch (IOException e) {

e.printStackTrace();

}

imageUri = Uri.fromFile(fileUri);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)

imageUri = FileProvider.getUriForFile(XGActivity.this, "db.lanxing.xylm.fileprovider", fileUri);//通过FileProvider创建一个content类型的Uri

PhotoUtils.takePicture(this, imageUri, CODE_CAMERA_REQUEST);

} else {

ToastUtils.show("设备没有SD卡!");

}

}

}

@Override

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

switch (requestCode) {

//动态申请权限的回调方法:

case CAMERA_PERMISSIONS_REQUEST_CODE: {

//调用系统相机申请拍照权限回调

if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

if (hasSdcard()) {

fileUri = new File(getExternalCacheDir() + "/photo.jpg");

try {

if (fileUri.exists()) {

fileUri.delete();

}

fileUri.createNewFile();

} catch (IOException e) {

e.printStackTrace();

}

imageUri = Uri.fromFile(fileUri);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)

imageUri = FileProvider.getUriForFile(XGActivity.this, "db.lanxing.xylm.fileprovider", fileUri);//通过FileProvider创建一个content类型的Uri

PhotoUtils.takePicture(this, imageUri, CODE_CAMERA_REQUEST);

} else {

ToastUtils.show("设备没有SD卡!");

}

} else {

ToastUtils.show("请允许打开相机!!");

}

break;

}

case STORAGE_PERMISSIONS_REQUEST_CODE:

//调用系统相册申请Sd卡权限回调

if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

PhotoUtils.openPic(this, CODE_GALLERY_REQUEST);

} else {

ToastUtils.show("请允许打操作SD卡!!");

}

break;

}

}

private int output_X = 480;

private int output_Y = 480;

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (resultCode == RESULT_OK) {

switch (requestCode) {

case CODE_CAMERA_REQUEST://拍照完成回调

fileCropUri = new File(getExternalCacheDir().getPath() + "/crop_photo.jpg");

try {

if (fileCropUri.exists()) {

fileCropUri.delete();

}

fileCropUri.createNewFile();

} catch (IOException e) {

e.printStackTrace();

}

cropImageUri = Uri.fromFile(fileCropUri);

PhotoUtils.cropImageUri(this, imageUri, cropImageUri, 1, 1, output_X, output_Y, CODE_RESULT_REQUEST);

break;

case CODE_GALLERY_REQUEST://访问相册完成回调

if (hasSdcard()) {

fileCropUri = new File(getExternalCacheDir().getPath() + "/crop_photo.jpg");

try {

if (fileCropUri.exists()) {

fileCropUri.delete();

}

fileCropUri.createNewFile();

} catch (IOException e) {

e.printStackTrace();

}

cropImageUri = Uri.fromFile(fileCropUri);

Uri newUri = Uri.parse(PhotoUtils.getPath(this, data.getData()));

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)

newUri = FileProvider.getUriForFile(this, "db.lanxing.xylm.fileprovider", new File(newUri.getPath()));

PhotoUtils.cropImageUri(this, newUri, cropImageUri, 1, 1, output_X, output_Y, CODE_RESULT_REQUEST);

} else {

ToastUtils.show("设备没有SD卡!");

}

break;

case CODE_RESULT_REQUEST:

String path = cropImageUri.getPath();

if (path != null) {

file = new File(path);

RequestBody requetbody = RequestBody.create(MediaType.parse("multipart/from-data"), file);

MultipartBody mybody = new MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("file", file.getName(), requetbody).build();

p.getPQiniuUpload(mybody.parts());

}

break;

}

}

}

/**

* 自动获取sdk权限

*/

private void autoObtainStoragePermission() {

if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, STORAGE_PERMISSIONS_REQUEST_CODE);

} else {

PhotoUtils.openPic(this, CODE_GALLERY_REQUEST);

}

}

/**

* 检查设备是否存在SDCard的工具方法

*/

public static boolean hasSdcard() {

String state = Environment.getExternalStorageState();

return state.equals(Environment.MEDIA_MOUNTED);

}

在res目录下创建xml文件夹在创建provider_paths.xml文件

在AndroidManifest.xml里配置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值