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();
android4.4,6.0,7.0系统调用相机拍照通配及获取相册图片
最新推荐文章于 2019-09-10 10:35:13 发布