// 启动相机
startCamera.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// mCurrentPhotoFile = new File(PHOTO_DIR,getPhotoFileName());
// //用当前时间给取得的图片命名
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
// Intent intent = new
// Intent("android.media.action.IMAGE_CAPTURE");
// Uri fromFile = Uri.fromFile(mCurrentPhotoFile);
// String string = fromFile.toString();
// Log.i("gp", string);
// intent.putExtra(MediaStore.EXTRA_OUTPUT,
// Uri.fromFile(mCurrentPhotoFile));
startActivityForResult(intent, CAPTURE_CODE);
}
});
调用系统相册
// 查看相片
camera_look_photo.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, IMAGE_CODE);
}
});
对回调函数进行处理
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
ContentResolver resolver = getContentResolver();
// 拍照
if (resultCode != RESULT_OK)
return;
switch (requestCode) {
case CAPTURE_CODE: {
// Toast.makeText(Camera.this, "--------------", 2).show();
Bitmap set_map = null;
paizhao = true;
xiangce = false;
// doCropPhoto(mCurrentPhotoFile);
String sdStatus = Environment.getExternalStorageState();
Bundle bundle = data.getExtras();
if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) {
bitMap = (Bitmap) data.getParcelableExtra("data");
if (bitMap == null) {
Uri originalUri = data.getData();
try {
System.out
.println(Build.MODEL+"----------camera----------------------611-------"
+ originalUri.toString());
byte[] mContent = readStream(resolver
.openInputStream(Uri.parse(originalUri
.toString())));
if(bitMap!=null)bitMap.recycle();
bitMap = getPicFromBytes(mContent, null);
cam_photo.setImageBitmap(bitMap);
camera_paht = "/data/sdcard/DCIM/Camera/"+ getPhotoFileName();
File aFile = new File("/data/sdcard/DCIM/Camera/"); // 图片上传地址
if(!aFile.exists())
{
System.out.println("camera-----------------------630------------创建文件---");
aFile.mkdirs();
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
if(set_map!=null)set_map.recycle();
set_map = scaleImg(bitMap, x[position_s],
y[position_s]);
set_map.compress(Bitmap.CompressFormat.JPEG, 25, out);
photo = out.toByteArray();
out.close();
try {
FileOutputStream fos = new FileOutputStream(camera_paht); // 文件输出流
try {
fos.write(photo);
// bitMap.recycle();
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} else {
//bitMap = (Bitmap) bundle.get("data");
Bitmap set_map2 = null;
bitMap = (Bitmap) data.getParcelableExtra("data");
System.out.println(Build.MODEL+"camera----------------660-------"+bitMap);
if (bitMap == null) {
Uri originalUri = data.getData();
System.out.println("camera----------------------687-------"
+ originalUri.toString());
byte[] mContent=null;
try {
mContent = readStream(resolver.openInputStream(Uri
.parse(originalUri.toString())));
if(bitMap!=null)bitMap.recycle();
bitMap = getPicFromBytes(mContent, null);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
//在这边进行图片的旋转
Bitmap resizedBitmap = null;
if(Build.MODEL.equals("7260")){
Matrix matrix = new Matrix();
matrix.postRotate(270);
resizedBitmap = Bitmap.createBitmap(bitMap, 0, 0,bitMap.getWidth(), bitMap.getHeight(), matrix, true);
bitMap = resizedBitmap;
}
System.out
.println("camera------------------585----------bitmap---"
+ bitMap);
// map = scaleImg(bitMap, 250, 420);
System.out.println("Camera--------------75------");
cam_photo.setImageBitmap(bitMap);
ByteArrayOutputStream out = new ByteArrayOutputStream();
// 对图片上传时候图片大小的选择
if(set_map2!=null)set_map2.recycle();
set_map2 = scaleImg(bitMap, x[position_s],
y[position_s]);
if(set_map2==null)return;
// 将其写入输出流中
set_map2.compress(Bitmap.CompressFormat.JPEG, 25, out);
photo = out.toByteArray();
try {
out.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
intTobyte(photo.length); // 图片的长度
System.out.println("camera-----------------------722-------"+photo_len);
camera_paht = PHOTO_DIR + File.separator
+ getPhotoFileName();
System.out
.println("camera ---------照片存储地址----------419-----"
+ camera_paht);
File aFile = new File(camera_paht); // 图片上传地址
try {
FileOutputStream fos = new FileOutputStream(aFile); // 文件输出流
try {
fos.write(photo);
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//System.out.println("-----photo----" + photo.length);
// Toast.makeText(Camera.this, "" + photo.length, 2).show();
}
break;
}
// 相册
case IMAGE_CODE: {
// camera_paht =PHOTO_DIR+File.separator+getPhotoFileName() ;
Bundle bundle = data.getExtras();
System.out.println("Camera--------------75------");
paizhao = false;
xiangce = true;
Uri originalUri = data.getData();
if (originalUri != null) {
Bitmap bitMap = null;
try {
if(bitMap!=null)bitMap.recycle();
bitMap = null;
bitMap = MediaStore.Images.Media.getBitmap(resolver,
originalUri);
String[] proj = { MediaColumns.DATA };
Cursor cursor = managedQuery(originalUri, proj, null, null,
null);
// 按我个人理解 这个是获得用户选择的图片的索引值
int column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA);
System.out.println("706-------------camera------"
+ column_index);
// 将光标移至开头 ,这个很重要,不小心很容易引起越界
cursor.moveToFirst();
// 最后根据索引值获取图片路径
ByteArrayOutputStream out = new ByteArrayOutputStream();
uploadPhotPath = cursor.getString(column_index);
System.out
.println("camera--------------------561----------- 相册图片的地址--------"
+ uploadPhotPath);
Bitmap map = scaleImg(bitMap, 250, 420);
map.compress(Bitmap.CompressFormat.JPEG, 25, out);
photo = out.toByteArray();
intTobyte(photo.length); // 图片的长度
System.out
.println("camera-----------------565----------相册图片的长度-----"
+ photo.length);
cam_photo.setImageBitmap(map);
} catch (Exception e) {
Toast.makeText(Camera.this, "图片不可用", 3).show();
} // 获取相机返回的数据
}
break;
}
}
}
图片的上传,以前是用特定的协议进行上传,不知道是协议的什么地方出现了,一直上传不成功。在网上找到另一种上传方法,Http有自己封装好的方法,
private void uploadFile2Svr2() {
if (paizhao) {
file = new File(camera_paht);
// paizao图片的地址
}
if (xiangce) {
if(uploadPhotPath==null)
return;
file = new File(uploadPhotPath);
}
System.out.println("camera------------------------807");
// 相册图片的地址
String httpUrl = path;
System.out.println("---------------");
HttpPost request = new HttpPost(httpUrl);
HttpClient httpClient = new DefaultHttpClient();
FileEntity entity = new FileEntity(file, "binary/octet-stream");
HttpResponse response;
request.setEntity(entity);
entity.setContentEncoding("binary/octet-stream");
try {
response = httpClient.execute(request);
System.out.println(response.toString());
} catch (ClientProtocolException e) {
Toast.makeText(Camera.this, "图片不可用,请重新拍摄上传", 3).show();
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
Toast.makeText(Camera.this, "图片不可用,请重新拍摄上传", 3).show();
e.printStackTrace();
}
}