android4.4,6.0,7.0系统调用相机拍照通配及获取相册图片

 
2按钮的简单布局就不写了,关键代码:
private String rootUrl = null;//根目录
private String curFormatDateStr = null;
private String filePath;//文件路径
private static final int CAMERA_IMAGE_CODE = 2;
private static final int LOCAL_IMAGE_CODE = 1;
private static final String IMAGE_TYPE = "image/*";

拍照按钮点击事件:
case R.id.ll_photograph:
    //拍照获取
    checkCameraPermission();//检查相机权限
    break;
相册获取图片点击事件:
case R.id.ll_add_from_album:
    //从相册中取
    Intent intent = new Intent();
     /* 开启Pictures画面Type设定为image */
    intent.setType(IMAGE_TYPE);
    /* 使用Intent.ACTION_GET_CONTENT这个Action */
    intent.setAction(Intent.ACTION_GET_CONTENT);
    /* 取得相片后返回本画面 */
    startActivityForResult(intent, LOCAL_IMAGE_CODE);
    break;

/**
 * TODO 检查相机权限
 */
private void checkCameraPermission() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_ACCESS_PERMISSION);
    } else {
        checkWriteStoragePermission();
    }
}

/**
 * TODO 检查写入SDK权限
 */
private void checkWriteStoragePermission() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_STORAGE_PERMISSION);
    } else {
        startCamera();
    }
}
/**
 * TODO 开启相机
 */
private void startCamera() {
    rootUrl = Environment.getExternalStorageDirectory().getPath();
    curFormatDateStr = TimeUtil.getImageNameTime(Calendar.getInstance().getTime());
    filePath = rootUrl + "/golf/camera/" + "IMG_" + curFormatDateStr + ".png";                                            File file = new File(filePath);                                                                                                     if (!file.exists()) {                                                                                                                             File dirs = new File(file.getParent());                                                                                               if (!dirs.exists()) {                                                                                                dirs.mkdirs();                                                                                                           }                                                                                                                            }                                                                                                                     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);                                                                 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(filePath)));                             startActivityForResult(intent, CAMERA_IMAGE_CODE);}
//
  @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            String url = "";
            if (requestCode == LOCAL_IMAGE_CODE) {
                Uri uri = data.getData();//此处或取到uri,就可以做相应的拓展处理

                Log.i(TAG, "相册uri是:" + uri.toString());
                url =ImageUtil.getRealFilePath(this, uri);//获取图片真实路径
            //此处为页面数据返回:给另一页面返回图片路径
                Log.i(TAG, "本地相册url是:" + url);                                                             data.putExtra("url", url);                                                                                this.setResult(RESULT_OK, data);                                                                                         finish();                                                                                                                          } else if (requestCode == CAMERA_IMAGE_CODE) {                                                                            Log.i(TAG, "相机拍照的url是:" + filePath);
		uri = Uri.parse(filePath);//此处或取到uri,就可以做相应的拓展处理,发送图片,显示图片等操作
		//此处为页面数据返回:给另一页面返回图片路径
                Intent intent = new Intent();                                                       intent.putExtra("url", filePath);                                                                                this.setResult(RESULT_OK, intent);                                                                                 finish();            }        }     }
/**
 * TODO 根据图片uri获取图片的url
 *
 * @param context
 * @param uri
 * @return
 */
public static String getRealFilePath(final Context context, final Uri uri) {
    if (null == uri) return null;
    final String scheme = uri.getScheme();
    String data = null;
    if (scheme == null)
        data = uri.getPath();
    else if (ContentResolver.SCHEME_FILE.equals(scheme)) {
        data = uri.getPath();
    } else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) {
        Cursor cursor = context.getContentResolver().query(uri, new String[]{MediaStore.Images.ImageColumns.DATA}, null, null, null);
        if (null != cursor) {
            if (cursor.moveToFirst()) {
                int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
                if (index > -1) {
                    data = cursor.getString(index);
                }
            }
            cursor.close();
        }
    }
    return data;
}

以上方法在7.0系统中会报错:
解决问题:在
onCreate(@Nullable Bundle savedInstanceState)方法中加入以下代码ok:
// android 7.0系统解决拍照的问题
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
builder.detectFileUriExposure();



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值