从本地图库获取图片
隐式启动activity
private static final String IMAGE_TYPE = "image/*";
private static final int RESULT_IMAGE = 10;
//从本地图库获取图片
private void getAnotherPicFromMediaStore() {
//本地图库
/** Intent.ACTION_PICK **
* Activity Action: Pick an item from the data, returning what was selected.
* Input: {@link #getData} is URI containing a directory of data
* (vnd.android.cursor.dir/*) from which to pick an item.
* Output: The URI of the item that was picked.
*/
Intent intent = new Intent(Intent.ACTION_PICK, null);
//MediaStore.Images.Media.EXTERNAL_CONTENT_URI是照片的路径
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_TYPE);
startActivityForResult(intent, RESULT_IMAGE);
}
选完图片回调onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != RESULT_OK) {
return;
}
Intent intent = new Intent(this, PuzzleActivity.class);
switch (requestCode) {
case RESULT_IMAGE:
//返回图片的Uri,此例中imageUri.toString = "content://media/external/images/media/38";
Uri imageUri = data.getData();
//通过contentResolver获取图片的路径
//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(imageUri, filePathColumn, null, null, null);
//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
if (!cursor.moveToFirst()) {
return;
}
//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String imagePath = cursor.getString(columnIndex);
//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
//别忘了释放游标
cursor.close();
File imageFile = new File(imagePath);
if (!imageFile.exists()) {
return;
}
//do Something, imageFile就是选择的图片
break;
}
}
调用系统相机拍照片
隐式启动activity
//这个路径用来存放拍摄的照片
public static final String TEMP_IMAGE_PATH;
//拍照的返回码
public static final int RESULT_CAMERA = 20;
//直接照一张图片
private void getAnotherPicFromCamera() {
//路径随便填,用来存储系统相机拍摄的照片,注意外部存储的权限
TEMP_IMAGE_PATH = getApplication().getCacheDir().toString() + "/temp.png";
//把路径转化为Uri
Uri photoUri = Uri.fromFile(new File(TEMP_IMAGE_PATH));
//使用系统相机的action
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//将Uri附加进intent传递过去
intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(intent, RESULT_CAMERA);
}
回调onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != RESULT_OK) {
return;
}
Intent intent = new Intent(this, PuzzleActivity.class);
switch (requestCode) {
case RESULT_CAMERA:
//返回RESULT_OK,就说明TEMP_IMAGE_PATH这个成员变量表示的文件就是我们系统相机拍摄的图片
File image = new File(TEMP_IMAGE_PATH);
break;
}
}