这里主要是实例:首先有个图形界面
首先是点击上传,从相册或相机处获取图片,然后在点击确定把图片上传到服务端,供大家参考,可以把代码整体考进项目然后慢慢参考
注意:要把AndroidManifest 里面设置权限 能调用相机或相册
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
这三行千万别忘了 http://www.xinyangzhuangshi.com/
import java.io.ByteArrayOutputStream;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.json.JSONObject;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Base64;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import com.myuupay.Constants;
import com.myuupay.R;
import com.myuupay.bank.CSwiperExampleUI;
import com.myuupay.home.TabHomeActivity;
import com.myuupay.utils.SimpleHttpClient;
import com.myuupay.utils.Uris;
import com.myuupay.utils.Utils;
@TargetApi(8)
public class UploadPictureActivity extends Activity{
private Button home_back,completeBtn,uploadPictureBtn;
private Button upload_1;
private Button upload_2;
private Button upload_3;
private Button upload_4;
private Button ensureBtn;
private ImageView[] imageViews = new ImageView[4]; // 图片
private Bitmap[] bitmaps = new Bitmap[4];
private String[] types = new String[]{"logo","business_licence","cardid1","cardid2"};
private int index = 0;
private String getBitmapString;
Bitmap myBitmap;
private byte[] mContent;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_upload_picture);
imageViews[0] = (ImageView)this.findViewById(R.id.image_1);
imageViews[1] = (ImageView)this.findViewById(R.id.image_2);
imageViews[2] = (ImageView)this.findViewById(R.id.image_3);
imageViews[3] = (ImageView)this.findViewById(R.id.image_4);
/*
* 返回到推荐
*/
home_back = (Button)this.findViewById(R.id.home_back);
home_back.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent(UploadPictureActivity.this,TabHomeActivity.class);
startActivity(intent);
}
});
completeBtn = (Button)this.findViewById(R.id.completeBtn);
completeBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(UploadPictureActivity.this,CompleteStatisticActivity.class);
startActivity(intent);
}
});
uploadPictureBtn = (Button)this.findViewById(R.id.uploadPictureBtn);
uploadPictureBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(UploadPictureActivity.this,UploadPictureActivity.class);
startActivity(intent);
}
});
/*
* 点击上传图片
*/
upload_1 = (Button) this.findViewById(R.id.upload_1);
upload_1.setOnClickListener(new UploadBtnListener(0));
upload_2 = (Button) this.findViewById(R.id.upload_2);
upload_2.setOnClickListener(new UploadBtnListener(1));
upload_3 = (Button) this.findViewById(R.id.upload_3);
upload_3.setOnClickListener(new UploadBtnListener(2));
upload_4 = (Button) this.findViewById(R.id.upload_4);
upload_4.setOnClickListener(new UploadBtnListener(3));
ensureBtn = (Button)this.findViewById(R.id.ensureBtn);
ensureBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
for (int i = 0; i < bitmaps.length; i++) {
Bitmap b = bitmaps[i];
if(b != null){
String type = types[i];
imageViews[i].setDrawingCacheEnabled(true);
//System.out.println("imageViews[UploadPictureActivity.this.index].getDrawingCache()---"+imageViews[UploadPictureActivity.this.index].getDrawingCache());
Bitmap obmp = Bitmap.createBitmap(imageViews[i].getDrawingCache());
getBitmapString = getBitmapStrBase64(obmp);
Map<String, String> mParam = new HashMap<String, String>();
String token = Constants.me.getToken();
String miId = Constants.me.getId();
//线写死了
String timestamp = "" + System.currentTimeMillis() / 1000;
String str = "upload"+miId+token+type+timestamp;
String signature = Utils.createSignStringLogin(str, "SHA-1");
mParam.put("merchants_id", miId);
mParam.put("token", token);
mParam.put("type", type);
mParam.put("photo_stream", getBitmapString);
mParam.put("timestamp", timestamp);
mParam.put("signature", signature);
String sendInfo = null;
try {
sendInfo = SimpleHttpClient.simplePost(Uris.UPLOAD, mParam);
JSONObject js = new JSONObject(sendInfo);
JSONObject data = js.getJSONObject("data");
JSONObject result = js.getJSONObject("result");
String msg = result.optString("msg");
Toast toast = Toast.makeText(UploadPictureActivity.this, msg,
Toast.LENGTH_SHORT);
toast.setGravity(Gravity.BOTTOM | Gravity.CENTER, 0, 0);
toast.show();
}catch(Exception e){
e.printStackTrace();
Toast toast = Toast.makeText(UploadPictureActivity.this, "上传失败:"+e.getMessage(),
Toast.LENGTH_SHORT);
toast.setGravity(Gravity.BOTTOM | Gravity.CENTER, 0, 0);
toast.show();
}
}
}
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
ContentResolver resolver = getContentResolver();
/**
* 如果不拍照 或者不选择图片返回 不执行任何操作
*/
if (data != null) {
/**
* 因为两种方式都用到了startActivityForResult方法,这个方法执行完后都会执行onActivityResult方法
* , 所以为了区别到底选择了那个方式获取图片要进行判断
* ,这里的requestCode跟startActivityForResult里面第二个参数对应 1== 相册 2 ==相机
*/
if (requestCode == 1) {
try {
// 获得图片的uri
Uri originalUri = data.getData();
// 将图片内容解析成字节数组
mContent = readStream(resolver.openInputStream(Uri
.parse(originalUri.toString())));
// 将字节数组转换为ImageView可调用的Bitmap对象
myBitmap = getPicFromBytes(mContent, null);
// //把得到的图片绑定在控件上显示
ImageView v = imageViews[this.index];
v.setImageBitmap(myBitmap);
bitmaps[index] = myBitmap;
} catch (Exception e) {
System.out.println(e.getMessage());
}
} else if (requestCode == 0) {
String sdStatus = Environment.getExternalStorageState();
if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用
return;
}
Bundle bundle = data.getExtras();
Bitmap bitmap = (Bitmap) bundle.get("data");// 获取相机返回的数据,并转换为Bitmap图片格式
FileOutputStream b = null;
File file = new File("/sdcard/myImage/");
file.mkdirs();// 创建文件夹,名称为myimage
// 照片的命名,目标文件夹下,以当前时间数字串为名称,即可确保每张照片名称不相同。
String str = null;
Date date = null;
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");// 获取当前时间,进一步转化为字符串
date = new Date();
str = format.format(date);
String fileName = "/sdcard/myImage/" + str + ".jpg";
try {
b = new FileOutputStream(fileName);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
b.flush();
b.close();
} catch (IOException e) {
e.printStackTrace();
}
if (data != null) {
Bitmap cameraBitmap = (Bitmap) data.getExtras().get(
"data");
bitmaps[index] = cameraBitmap;
imageViews[UploadPictureActivity.this.index].setImageBitmap(cameraBitmap);
}
}
}
}
}
public static Bitmap getPicFromBytes(byte[] bytes,
BitmapFactory.Options opts) {
if (bytes != null)
if (opts != null)
return BitmapFactory.decodeByteArray(bytes, 0, bytes.length,
opts);
else
return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
return null;
}
public static byte[] readStream(InputStream inStream) throws Exception {
byte[] buffer = new byte[1024];
int len = -1;
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
while ((len = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
byte[] data = outStream.toByteArray();
outStream.close();
inStream.close();
return data;
}
// 把Bitmap转换成Base64
public static String getBitmapStrBase64(Bitmap bitmap) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 100, baos);
byte[] bytes = baos.toByteArray();
return Base64.encodeToString(bytes, 0);
}
class UploadBtnListener implements OnClickListener{
private int index;
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public UploadBtnListener(int index){this.setIndex(index);}
@Override
public void onClick(View v) {
UploadPictureActivity.this.index = index;
/*
* // TODO Auto-generated method stub Intent intent = new
* Intent("android.media.action.IMAGE_CAPTURE");
* startActivityForResult(intent,Activity.DEFAULT_KEYS_DIALER);
*/
final AlertDialog.Builder builder = new AlertDialog.Builder(
UploadPictureActivity.this);
builder.setTitle("选择照片");
builder.setPositiveButton("相机",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface
dialog, int which) {
Intent intent = new Intent(
"android.media.action.IMAGE_CAPTURE");
startActivityForResult(intent, 0);
}
});
builder.setNegativeButton("相册",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface
dialog, int which) {
Intent intent = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, 1);
}
});
AlertDialog alert = builder.create();
alert.show();
}
};
}
更多源码http://item.taobao.com/item.htm?spm=686.1000925.1000774.14.ig1I3m&id=40289334498