安卓拍照,各种兼容
2017-02-13 16:47
134 查看
/* 头像名称 */ private static final String IMAGE_FILE_NAME = "faceImage.jpg"; /* 请求码 */ private static final int IMAGE_REQUEST_CODE = 0; private static final int CAMERA_REQUEST_CODE = 1; private static final int RESULT_REQUEST_CODE = 2; private static final int NICKNAME_REQUEST_CODE = 3; private static final int AUTHENTICATION_REQUEST_CODE = 4;
Intent intentFromCapture = new Intent( MediaStore.ACTION_IMAGE_CAPTURE); // 判断存储卡是否可以用,可用进行存储 //if (Tools.hasSdcard()) {
intentFromCapture.putExtra( MediaStore.EXTRA_OUTPUT, // Uri.fromFile(new File(Environment.getExternalStorageDirectory(), IMAGE_FILE_NAME))); Uri.fromFile(new File(getExternalFilesDir(""), IMAGE_FILE_NAME)));
//} startActivityForResult(intentFromCapture, CAMERA_REQUEST_CODE);@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//结果码不等于取消时候
if (resultCode != RESULT_CANCELED) {
switch (requestCode) {
case IMAGE_REQUEST_CODE:
// startPhotoZoom(data.getData()); File temp1 = new File(Global.getPath(this,data.getData()));//兼容写法,不同手机版本路径不同 startPhotoZoom(Uri.fromFile(temp1));break;
case CAMERA_REQUEST_CODE:
// File temp = new File(getCacheDir().getAbsolutePath() + "/" + IMAGE_FILE_NAME); // File temp = new File(Environment.getExternalStorageDirectory() + "/" + IMAGE_FILE_NAME); File temp = new File(getExternalFilesDir("") + "/" + IMAGE_FILE_NAME);startPhotoZoom(Uri.fromFile(temp));
break;
case RESULT_REQUEST_CODE:
if (data != null) {
getImageToView(data);
}
break;
}
}
super.onActivityResult(requestCode, resultCode, data);
}
// ——————————相册———————————— private void startPhotoPickActivity() { Intent intentFromGallery = new Intent(); intentFromGallery.setType("image/*"); // 设置文件类型 intentFromGallery .setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(intentFromGallery, IMAGE_REQUEST_CODE); }
/** * 裁剪图片方法实现 * * @param uri */ public void startPhotoZoom(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); // 设置裁剪 intent.putExtra("crop", "true"); // aspectX aspectY 是宽高的比例 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); // outputX outputY 是裁剪图片宽高 intent.putExtra("outputX", 640); intent.putExtra("outputY", 640); intent.putExtra("return-data", true); startActivityForResult(intent, 2); } /** * 保存裁剪之后的图片数据 */ private void getImageToView(Intent data) { Bundle extras = data.getExtras(); if (extras != null) { final Bitmap photo = extras.getParcelable("data"); File temp = new File(getCacheDir().getAbsolutePath() + "/" + IMAGE_FILE_NAME); FileOutputStream fos = null; try { fos = new FileOutputStream(temp); photo.compress(Bitmap.CompressFormat.JPEG, 100, fos); } catch (FileNotFoundException e) { return; } finally { if (fos != null) try { fos.close(); } catch (IOException e) { } } ImageApiDialog.ParseData<File> parse=new ImageApiDialog.ParseData<File>() { @Override public ApiFileEntity parseData(File data) { ApiFileEntity entity = new ApiFileEntity(); entity.fileParamName = "file"; entity.data = data.getAbsolutePath(); // entity.data = data.uriString;//.replace("file://", ""); entity.fileName = "1.jpg"; entity.contentType = "image/jpeg"; return entity; } }; ArrayList<File> files=new ArrayList<>(); files.add(temp); ImageApiDialog.requestFile(this, files, new ImageApiDialog.Callback() { @Override public void onStart() { } @Override public void onFileAfter(List<FileModel> fileRsults) { userApis.headimg(buildCode(), fileRsults.get(0), new ApiCallback<String>() { @Override public void onCallback(ApiResponse<List<String>> response) { if (ApiConfig.CODE_OK.equals(response.code)) { userInfoManager.resetHeadImg(response.result.get(0)); ivHeadPortrait.setImageBitmap(photo); } } }); } @Override public void onEnd(int state) { } }, parse); } }
@SuppressLint("NewApi") public static String getPath(final Context context, final Uri uri) { final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; // DocumentProvider if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) { // ExternalStorageProvider if (isExternalStorageDocument(uri)) { final String docId = DocumentsContract.getDocumentId(uri); final String[] split = docId.split(":"); final String type = split[0]; if ("primary".equalsIgnoreCase(type)) { return Environment.getExternalStorageDirectory() + "/" + split[1]; } } // DownloadsProvider else if (isDownloadsDocument(uri)) { final String id = DocumentsContract.getDocumentId(uri); final Uri contentUri = ContentUris.withAppendedId( Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); return getDataColumn(context, contentUri, null, null); } // MediaProvider else if (isMediaDocument(uri)) { final String docId = DocumentsContract.getDocumentId(uri); final String[] split = docId.split(":"); final String type = split[0]; Uri contentUri = null; if ("image".equals(type)) { contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; } else if ("video".equals(type)) { contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; } else if ("audio".equals(type)) { contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; } final String selection = "_id=?"; final String[] selectionArgs = new String[]{ split[1] }; return getDataColumn(context, contentUri, selection, selectionArgs); } } // MediaStore (and general) else if ("content".equalsIgnoreCase(uri.getScheme())) { // Return the remote address if (isGooglePhotosUri(uri)) return uri.getLastPathSegment(); return getDataColumn(context, uri, null, null); } // File else if ("file".equalsIgnoreCase(uri.getScheme())) { return uri.getPath(); } return ""; }
相关文章推荐
- 安卓调用系统相机拍照的几个步骤,同时解决版本兼容问题
- 获取鼠标的位置 (完美兼容各种浏览器)
- 一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10
- 搞定各种IE兼容问题,IE6,IE7,IE8,IE9,IE10 -
- [纯css下拉菜单]---兼容各种IE,但搜狗好像有点问题
- 一行代码解决各种IE兼容问题IE8,IE9,IE10
- 使用asp.net MVC4创建兼容各种设备显示的web应用程序
- js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符
- js 获取屏幕各种宽高的方法(浏览器兼容)
- js操作iframe兼容各种主流浏览器示例代码
- 安卓源码下载中的各种问题
- JS网页播放声音实现代码兼容各种浏览器
- 一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10
- 安卓的各种动画(透明度,平移,旋转,缩放)以及侦听
- 【Android高级】安卓各种动画使用方法详解
- 解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10
- javascript 获取屏幕各种宽高的方法(浏览器兼容)
- js获取各种宽高(ie6&ie6+,firefox,chrome兼容完整版)
- 安卓开发中 各种小问题的解决----持续更新
- 兼容各种浏览器的一键复制--ZeroClipboard