很多同学在做客户端的时候,都需要做上传图片,那么上传图片如何上传呢?自己写一个SurfaceView做为展示区,然后用camera类来实现?太out了!直接调用相机拍照获取或者调用相册来取照片才是王道
现在晓飞教你如何调用相机和相册:
首先:
1.首先在AndroidManifest.xml中设置权限:
android:name="android.permission.CAMERA"/>
/>
android:name="android.hardware.camera.autofocus"
/>
2.调用相机和相册:
Intent takephoto = new
Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takephoto,CAPTURE_CODE);
Intent album = new
Intent(Intent.ACTION_GET_CONTENT);
album.setType("image/*");
startActivityForResult(album, IMAGE_CODE);
因为需要调用到返回值,所以必须使用startActivityForResult(Intent
intent,int result);
3.写onActivityResult方法接返回值
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
try {
ContentResolver resolver = getContentResolver();
if (resultCode != RESULT_OK) {
return;
} else if (requestCode == IMAGE_CODE) {
Uri originalUri = data.getData();
if (originalUri != null) {
bm = MediaStore.Images.Media.getBitmap(resolver,originalUri);
iv.setImageBitmap(bm);
}
} else if (requestCode == CAPTURE_CODE
&& resultCode == RESULT_OK) {
Bundle bundle = data.getExtras();
if (bundle != null) {
bm = (Bitmap) bundle.get("data");
iv.setImageBitmap(bm);
}
}
} catch (Exception e) {
Toast.makeText(this, "选择图片错误,图片只能为jpg格式",
Toast.LENGTH_SHORT).show();
}
}
至此,bitmap已经返回并且已经赋值给了界面上的ImageView。
友情提示:如何将bitmap转成byte[]?晓飞告诉你:
private byte[] Bitmap2Bytes(Bitmap bm){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
return baos.toByteArray();
}
留意观察晓飞帖子的同学应该知道晓飞曾经发过一个http请求的工具类(私藏好久的万能http请求工具类),结合那个工具类就可以图片上传到服务器端了