android4.4,6.0,7.0系统调用相机拍照通配及获取相册图片
来源:互联网 发布:淘宝社区论坛 编辑:程序博客网 时间:2024/05/16 11:55
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();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);}curFormatDateStr = TimeUtil.getImageNameTime(Calendar.getInstance().getTime());//@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 0
- android4.4,6.0,7.0系统调用相机拍照通配及获取相册图片
- 调用系统相机拍照获取图片或者从相册中调用本地图片显示问题
- android 调用系统相册选取照片或者打开相机拍照获取图片
- android 调用系统相册选取照片或者打开相机拍照获取图片
- 调用系统相机拍照,从相册选取图片上传
- Android7.0调用系统相机拍照、相册选择图片、裁剪
- 系统相机拍照、从相册中获取图片
- 调用系统相册和系统相机拍照
- 调用系统相机拍照和选择相册
- Android调用系统相册和相机拍照
- Android 相册选择照片或拍照获取图片系统6.0及7.0实现
- 调用系统相机拍照、调用相册、调用系统录像并获取缩略图
- Android开发,调用相册图片或者调用相机进行拍照获取图片
- Android调用系统相机拍照并获取图片
- Anroid调用系统相机或相册获取图片
- 调用系统相机/相册获取图片的完美解决方案
- Android调用系统相册或相机获取图片
- Android 调用系统相机拍照(适配7.0)、从图库选择图片;从数据库读取联系人信息、相册图片
- java 知识点
- JavaScript从入门到放弃(4)--原生的DOM操作,以及Ajax网络请求
- 括号配对问题
- centOS 安装配置Tomcat
- NPN_InvalidateRect的堆栈
- android4.4,6.0,7.0系统调用相机拍照通配及获取相册图片
- CBK北京运营中心“奋战2017年第四季度动员大会”圆满成功
- 应用程序无法正常启动(0xc000007b) 请单击确定关闭应用程序
- angular js 简单购物车
- 使用Razor+MVC+PartialView实现预览记账凭证的HTML页面
- 测试人眼中的车联网(比亚迪云服务-3.2.1)——开启空调
- bootstrap模态框出现关闭后再打开滚动条不回顶的解决办法
- 微信支付一些细节
- (三)算法--排序算法选择排序和冒泡排序