Android 拍照以及选择本地图片上传(使用MX4没有问题,LG手机貌似不能选择本地图片,以后有时间看看),在网上找的一些资料,改写的。

activity代码

package com.ytint.wloaa.activity;import java.io.BufferedOutputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.text.SimpleDateFormat;import java.util.Date;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.UUID;import android.app.Activity;import android.content.ContentResolver;import android.content.Context;import android.content.Intent;import android.database.Cursor;import android.graphics.Bitmap;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import android.util.Log;import android.view.Gravity;import android.view.View;import android.view.View.OnClickListener;import android.view.inputmethod.InputMethodManager;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.Toast;import com.ab.activity.AbActivity;import com.ab.view.ioc.AbIocView;import com.ytint.wloaa.R;import com.ytint.wloaa.app.MyApplication;import com.ytint.wloaa.bean.URLs;/** * 本地上传和调用系统拍照 * @author Administrator * */public class PhotoActivity  extends AbActivity implements OnClickListener{private MyApplication application;String TAG = "PhotoActivity";    private ImageView img;    private EditText img_content;    private Button nati;    private Button pai;    private Button submit;        @AbIocView(id = R.id.photo_full)LinearLayout photo_full;        private static String srcPath;    private static final int TIME_OUT = 10*1000;   //超时时间    private static final String CHARSET = "utf-8"; //设置编码    private String loginKey;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.aa);        application = (MyApplication) this.getApplication();loginKey = application.getProperty("loginKey");        initView();    }    private void initView() {        img = (ImageView) findViewById(R.id.img);        nati = (Button) findViewById(R.id.natives);        pai = (Button) findViewById(R.id.pai);        submit = (Button) findViewById(R.id.submit);        img_content=(EditText)findViewById(R.id.img_content);        nati.setOnClickListener(this);        pai.setOnClickListener(this);        submit.setOnClickListener(this);            OnClickListener keyboard_hide = new OnClickListener() {@Overridepublic void onClick(View v) {InputMethodManager imm = (InputMethodManager) PhotoActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE);imm.hideSoftInputFromWindow(v.getWindowToken(), 0);}};photo_full.setClickable(true);photo_full.setOnClickListener(keyboard_hide);    }    @Override    public void onClick(View v) {        switch(v.getId()){            case R.id.natives:                Intent local = new Intent();                local.setType("image/*");                local.setAction(Intent.ACTION_GET_CONTENT);                startActivityForResult(local, 2);                break;            case R.id.pai:                Intent it = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);                startActivityForResult(it, 1);                break;            case R.id.submit:            if (srcPath == null || srcPath=="") {            showToast("文件不存在");            }else{            submitUploadFile();            }            break;        }    }    /**     * 拍照上传     */    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        if (resultCode == Activity.RESULT_OK) {            switch(requestCode) {                case 1:                    Bundle extras = data.getExtras();                    Bitmap b = (Bitmap) extras.get("data");                    img.setImageBitmap(b);                    String name = new SimpleDateFormat("yyyyMMddhhmmss").format(new Date());                    String fileNmae = Environment.getExternalStorageDirectory().toString()+File.separator+"dong/image/"+name+".jpg";                    srcPath = fileNmae;                    System.out.println(srcPath+"----------保存路径1");                    File myCaptureFile =new File(fileNmae);                    try {                        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){                            if(!myCaptureFile.getParentFile().exists()){                                myCaptureFile.getParentFile().mkdirs();                            }                            BufferedOutputStream bos;                            bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));                            b.compress(Bitmap.CompressFormat.JPEG, 80, bos);                            bos.flush();                            bos.close();                        }else{                            Toast toast= Toast.makeText(PhotoActivity.this, "保存失败,SD卡无效", Toast.LENGTH_SHORT);                            toast.setGravity(Gravity.CENTER, 0, 0);                            toast.show();                        }                    } catch (FileNotFoundException e) {                        e.printStackTrace();                    } catch (IOException e) {                        e.printStackTrace();                    }                    break;                case 2:                    Uri uri = data.getData();                    img.setImageURI(uri);                    ContentResolver cr = this.getContentResolver();                    Cursor c = cr.query(uri, null, null, null, null);                    c.moveToFirst();                    //这是获取的图片保存在sdcard中的位置                    srcPath = c.getString(c.getColumnIndex("_data"));                    System.out.println(srcPath+"----------保存路径2");                    break;                default:                    break;            };        }//    n =1;    }    private void submitUploadFile(){    final File file=new File(srcPath);    final String RequestURL=URLs.UPLOADPHOTO;    if (file == null || (!file.exists())) {    return;    }Log.i(TAG, "请求的URL=" + RequestURL);Log.i(TAG, "请求的fileName=" + file.getName());final Map params = new HashMap();          params.put("user_id", loginKey);          params.put("file_type", "1");          params.put("content", img_content.getText().toString());          showProgressDialog();    new Thread(new Runnable() { //开启线程上传文件    @Override    public void run() {    uploadFile(file, RequestURL,params);    }    }).start();    }    /**     * android上传文件到服务器     * @param file  需要上传的文件     * @param RequestURL  请求的rul     * @return  返回响应的内容     */    private String uploadFile(File file,String RequestURL,Map param){        String result = null;        String  BOUNDARY =  UUID.randomUUID().toString();  //边界标识   随机生成        String PREFIX = "--" , LINE_END = "\r\n";        String CONTENT_TYPE = "multipart/form-data";   //内容类型        // 显示进度框//showProgressDialog();        try {            URL url = new URL(RequestURL);            HttpURLConnection conn = (HttpURLConnection) url.openConnection();            conn.setReadTimeout(TIME_OUT);            conn.setConnectTimeout(TIME_OUT);            conn.setDoInput(true);  //允许输入流            conn.setDoOutput(true); //允许输出流            conn.setUseCaches(false);  //不允许使用缓存            conn.setRequestMethod("POST");  //请求方式            conn.setRequestProperty("Charset", CHARSET);  //设置编码            conn.setRequestProperty("connection", "keep-alive");            conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY);            if(file!=null){                /**                 * 当文件不为空,把文件包装并且上传                 */                DataOutputStream dos = new DataOutputStream( conn.getOutputStream());                StringBuffer sb = new StringBuffer();                                String params = "";                  if (param != null && param.size() > 0) {                      Iterator it = param.keySet().iterator();                      while (it.hasNext()) {                          sb = null;                          sb = new StringBuffer();                          String key = it.next();                          String value = param.get(key);                          sb.append(PREFIX).append(BOUNDARY).append(LINE_END);                          sb.append("Content-Disposition: form-data; name=\"").append(key).append("\"").append(LINE_END).append(LINE_END);                          sb.append(value).append(LINE_END);                          params = sb.toString();                          Log.i(TAG, key+"="+params+"##");                          dos.write(params.getBytes());  //                      dos.flush();                      }                  }                  sb = new StringBuffer();                sb.append(PREFIX);                sb.append(BOUNDARY);                sb.append(LINE_END);                /**                 * 这里重点注意:                 * name里面的值为服务器端需要key   只有这个key 才可以得到对应的文件                 * filename是文件的名字,包含后缀名的   比如:abc.png                 */                sb.append("Content-Disposition: form-data; name=\"upfile\";filename=\""+file.getName()+"\""+LINE_END);                sb.append("Content-Type: image/pjpeg; charset="+CHARSET+LINE_END);                sb.append(LINE_END);                dos.write(sb.toString().getBytes());                InputStream is = new FileInputStream(file);                byte[] bytes = new byte[1024];                int len = 0;                while((len=is.read(bytes))!=-1){                    dos.write(bytes, 0, len);                }                is.close();                dos.write(LINE_END.getBytes());                byte[] end_data = (PREFIX+BOUNDARY+PREFIX+LINE_END).getBytes();                dos.write(end_data);                                dos.flush();                /**                 * 获取响应码  200=成功                 * 当响应成功,获取响应的流                 */                int res = conn.getResponseCode();                System.out.println("res========="+res);                if(res==200){                    InputStream input =  conn.getInputStream();                    StringBuffer sb1= new StringBuffer();                    int ss ;                    while((ss=input.read())!=-1){                        sb1.append((char)ss);                    }                    result = sb1.toString();//                 // 移除进度框//    removeProgressDialog();                    finish();                }                else{                }            }        } catch (MalformedURLException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        return result;    }}

xml代码

<?xml version="1.0" encoding="utf-8"?>                        


更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. android sd卡读写 附源码
  6. NDK编译:fatal error: GLES2/gl2platform.h: No such file or dir
  7. Error: Error parsing D:\android-sdk-windows\sdk\system-im
  8. rk3326 android 8.1 上传sftp时候jsch类报错
  9. android 不同drawable文件对应的dpi值,和所放图片分辨率

随机推荐

  1. 引用 Android的DTMF处理(ToneGenerator)
  2. 常用的小方法,避免忘记,在此记录一下
  3. Android(安卓)SystemProperty
  4. android 制作的精美闹钟
  5. Android上使用Chrome DevTools 远程调试W
  6. Android与JS互调
  7. android 为activity添加optionMenu选项菜
  8. Android(安卓)adb shell 常用命令
  9. 向Android模拟器发短信打电话
  10. android main.xml分析。。一点点补充