1、按鈕觸發調用系統相機還是相冊,以及是否裁剪
//=================選擇照片======start=====================================================================
private String imagePath;
private boolean crop = true;
private boolean isSave = false;
private final int m_width = 400;
private final int m_height = 400;
public void takePhoto() {
// TODO Auto-generated method stub
imagePath = getTakePhotoPath();
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//"android.media.action.IMAGE_CAPTURE"
intent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(new File(imagePath)));
if(crop)
{
startActivityForResult(intent,
RequestCode.TakePhoto_crop.getCode());
}else
{
startActivityForResult(intent,
RequestCode.TakePhoto.getCode());
}
}
public void pickPhoto() {
// TODO Auto-generated method stub
Intent intent1 = new Intent(Intent.ACTION_PICK);
intent1.setType("image/*");
intent1.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
if(crop)
{
startActivityForResult(intent1,
RequestCode.PickPhoto_crop.getCode());
}else
{
startActivityForResult(intent1,
RequestCode.PickPhoto.getCode());
}
}
/***
* 配置拍照後圖片在本地的地址
* @return
*/
public String getTakePhotoPath() {
String SDCARD = Environment.getExternalStorageDirectory()
.getAbsolutePath();
File file = new File(SDCARD + "/yashu/pic/");
if (!file.exists()) {
file.mkdirs();
}
String imagePath = SDCARD + "/yashu/pic/"
+ System.currentTimeMillis() + ".jpg";
return imagePath;
}
public enum RequestCode {
OK {
@Override
public int getCode() {
// TODO Auto-generated method stub
return 0;
}
},
PickPhoto {
@Override
public int getCode() {
// TODO Auto-generated method stub
return 105;
}
},
TakePhoto {
@Override
public int getCode() {
// TODO Auto-generated method stub
return 106;
}
},
PickPhoto_crop {
@Override
public int getCode() {
// TODO Auto-generated method stub
return 107;
}
},
TakePhoto_crop {
@Override
public int getCode() {
// TODO Auto-generated method stub
return 108;
}
},
IntentData {
@Override
public int getCode() {
// TODO Auto-generated method stub
return 98;
}
};
public abstract int getCode();
}
2、回調函數,如果圖片需要保存到相冊,isSave = true;
private Uri uuUri;
@Override
protected void onActivityResult(int requestCode, int resultCode,
final Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RequestCode.PickPhoto.getCode()
&& resultCode == Activity.RESULT_OK) {
Uri uri = data.getData();
Cursor cursor = getContentResolver().query(uri, null, null, null,
null);
cursor.moveToFirst();
String imagePath = cursor.getString(1); // 圖片文件路徑
}
else if (requestCode == RequestCode.TakePhoto.getCode()
&& resultCode == Activity.RESULT_OK) {
}
else if (requestCode == RequestCode.TakePhoto_crop.getCode()
&& resultCode == Activity.RESULT_OK) {
File file = new File(imagePath);
if(isSave && file.exists())
{
/* Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri uri = Uri.fromFile(file);
intent.setData(uri);
mContext.sendBroadcast(intent);*/
try {
String picPath = MediaStore.Images.Media.insertImage(mContext.getContentResolver(),
file.getAbsolutePath(), file.getName(), null);
//sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, uuUri));
// mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uuUri));
// mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + Environment.getExternalStorageDirectory())));
uuUri= Uri.parse(picPath);
//mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uuUri));
String[] proj = { MediaStore.Images.Media.DATA };
Cursor actualimagecursor = this.managedQuery(Uri.parse(picPath),proj,null,null,null);
int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
actualimagecursor.moveToFirst();
String img_path = actualimagecursor.getString(actual_image_column_index);
//Log.d("StorageActivity", "married is " + img_path);
MediaScannerConnection.scanFile(this, new String[]{ img_path}, null, null);
//sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
//mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse(file.getAbsolutePath())));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
}
}
Uri uri = Uri.fromFile(new File(imagePath));
imagePath = ConfigManager.getInstance().getTakePhotoPath();
cropImage(uri, m_width, m_width, RequestCode.TakePhoto.getCode(),imagePath);
}
else if (requestCode == RequestCode.PickPhoto_crop.getCode()
&& resultCode == Activity.RESULT_OK) {
Uri uri = data.getData();
imagePath = ConfigManager.getInstance().getTakePhotoPath();
cropImage(uri, m_width, m_width, RequestCode.TakePhoto.getCode(),imagePath);
}
}
//截取圖片
public void cropImage(Uri uri, int outputX, int outputY, int requestCode,String path){
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*"); //path);//
intent.putExtra("crop", "true");
if(android.os.Build.MANUFACTURER.contains("HUAWEI"))
{//華爲特殊處理 不然會顯示圓
intent.putExtra("aspectX", 9998);
intent.putExtra("aspectY", 9999);
}
else
{
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
}
intent.putExtra("outputX", outputX);
intent.putExtra("outputY", outputY);
intent.putExtra("outputFormat", "JPEG");
intent.putExtra("noFaceDetection", true);
intent.putExtra("return-data", false);
//intent.putExtra("circleCrop", false);
intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(new File(path)));
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
startActivityForResult(intent, requestCode);
}