安卓 相机或相册图片上传至手机界面并显示 最后上传至服务器(界面xml布局代码前一个文章有)

这里主要是实例:首先有个图形界面

首先是点击上传,从相册或相机处获取图片,然后在点击确定把图片上传到服务端,供大家参考,可以把代码整体考进项目然后慢慢参考

注意:要把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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值