Android 拍照 以及从本地选择图片 上传

来源:互联网 发布:类似于上瘾的网络剧 编辑:程序博客网 时间:2024/05/17 04:15

activity代码

[java] view plain copy
 print?
  1. package com.ytint.wloaa.activity;  
  2.   
  3. import java.io.BufferedOutputStream;  
  4. import java.io.DataOutputStream;  
  5. import java.io.File;  
  6. import java.io.FileInputStream;  
  7. import java.io.FileNotFoundException;  
  8. import java.io.FileOutputStream;  
  9. import java.io.IOException;  
  10. import java.io.InputStream;  
  11. import java.net.HttpURLConnection;  
  12. import java.net.MalformedURLException;  
  13. import java.net.URL;  
  14. import java.text.SimpleDateFormat;  
  15. import java.util.Date;  
  16. import java.util.HashMap;  
  17. import java.util.Iterator;  
  18. import java.util.Map;  
  19. import java.util.UUID;  
  20.   
  21. import android.app.Activity;  
  22. import android.content.ContentResolver;  
  23. import android.content.Context;  
  24. import android.content.Intent;  
  25. import android.database.Cursor;  
  26. import android.graphics.Bitmap;  
  27. import android.net.Uri;  
  28. import android.os.Bundle;  
  29. import android.os.Environment;  
  30. import android.provider.MediaStore;  
  31. import android.util.Log;  
  32. import android.view.Gravity;  
  33. import android.view.View;  
  34. import android.view.View.OnClickListener;  
  35. import android.view.inputmethod.InputMethodManager;  
  36. import android.widget.Button;  
  37. import android.widget.EditText;  
  38. import android.widget.ImageView;  
  39. import android.widget.LinearLayout;  
  40. import android.widget.Toast;  
  41.   
  42. import com.ab.activity.AbActivity;  
  43. import com.ab.view.ioc.AbIocView;  
  44. import com.ytint.wloaa.R;  
  45. import com.ytint.wloaa.app.MyApplication;  
  46. import com.ytint.wloaa.bean.URLs;  
  47.   
  48. /** 
  49.  * 本地上传和调用系统拍照 
  50.  * @author Administrator 
  51.  * 
  52.  */  
  53. public class PhotoActivity  extends AbActivity implements OnClickListener{  
  54.     private MyApplication application;  
  55.     String TAG = "PhotoActivity";  
  56.     private ImageView img;  
  57.     private EditText img_content;  
  58.     private Button nati;  
  59.     private Button pai;  
  60.     private Button submit;  
  61.       
  62.     @AbIocView(id = R.id.photo_full)  
  63.     LinearLayout photo_full;  
  64.       
  65.     private static String srcPath;  
  66.     private static final int TIME_OUT = 10*1000;   //超时时间  
  67.     private static final String CHARSET = "utf-8"//设置编码  
  68.     private String loginKey;  
  69.     @Override  
  70.     protected void onCreate(Bundle savedInstanceState) {  
  71.         super.onCreate(savedInstanceState);  
  72.         setContentView(R.layout.aa);  
  73.         application = (MyApplication) this.getApplication();  
  74.     loginKey = application.getProperty("loginKey");  
  75.         initView();  
  76.     }  
  77.   
  78.     private void initView() {  
  79.         img = (ImageView) findViewById(R.id.img);  
  80.         nati = (Button) findViewById(R.id.natives);  
  81.         pai = (Button) findViewById(R.id.pai);  
  82.         submit = (Button) findViewById(R.id.submit);  
  83.         img_content=(EditText)findViewById(R.id.img_content);  
  84.         nati.setOnClickListener(this);  
  85.         pai.setOnClickListener(this);  
  86.         submit.setOnClickListener(this);  
  87.           
  88.         OnClickListener keyboard_hide = new OnClickListener() {  
  89.   
  90.             @Override  
  91.             public void onClick(View v) {  
  92.                 InputMethodManager imm = (InputMethodManager) PhotoActivity.this  
  93.                         .getSystemService(Context.INPUT_METHOD_SERVICE);  
  94.                 imm.hideSoftInputFromWindow(v.getWindowToken(), 0);  
  95.             }  
  96.   
  97.         };  
  98.         photo_full.setClickable(true);  
  99.         photo_full.setOnClickListener(keyboard_hide);  
  100.     }  
  101.   
  102.     @Override  
  103.     public void onClick(View v) {  
  104.         switch(v.getId()){  
  105.             case R.id.natives:  
  106.                 Intent local = new Intent();  
  107.                 local.setType("image/*");  
  108.                 local.setAction(Intent.ACTION_GET_CONTENT);  
  109.                 startActivityForResult(local, 2);  
  110.                 break;  
  111.             case R.id.pai:  
  112.                 Intent it = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);  
  113.                 startActivityForResult(it, 1);  
  114.                 break;  
  115.             case R.id.submit:  
  116.                 if (srcPath == null || srcPath=="") {  
  117.                     showToast("文件不存在");  
  118.                 }else{  
  119.                     submitUploadFile();  
  120.                 }  
  121.                 break;  
  122.         }  
  123.     }  
  124.   
  125.     /**  
  126.      * 拍照上传  
  127.      */  
  128.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  129.         super.onActivityResult(requestCode, resultCode, data);  
  130.   
  131.         if (resultCode == Activity.RESULT_OK) {  
  132.             switch(requestCode) {  
  133.                 case 1:  
  134.                     Bundle extras = data.getExtras();  
  135.                     Bitmap b = (Bitmap) extras.get("data");  
  136.                     img.setImageBitmap(b);  
  137.                     String name = new SimpleDateFormat("yyyyMMddhhmmss").format(new Date());  
  138.                     String fileNmae = Environment.getExternalStorageDirectory().toString()+File.separator+"dong/image/"+name+".jpg";  
  139.                     srcPath = fileNmae;  
  140.                     System.out.println(srcPath+"----------保存路径1");  
  141.                     File myCaptureFile =new File(fileNmae);  
  142.                     try {  
  143.                         if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){  
  144.                             if(!myCaptureFile.getParentFile().exists()){  
  145.                                 myCaptureFile.getParentFile().mkdirs();  
  146.                             }  
  147.                             BufferedOutputStream bos;  
  148.                             bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));  
  149.                             b.compress(Bitmap.CompressFormat.JPEG, 80, bos);  
  150.                             bos.flush();  
  151.                             bos.close();  
  152.                         }else{  
  153.   
  154.                             Toast toast= Toast.makeText(PhotoActivity.this"保存失败,SD卡无效", Toast.LENGTH_SHORT);  
  155.                             toast.setGravity(Gravity.CENTER, 00);  
  156.                             toast.show();  
  157.                         }  
  158.                     } catch (FileNotFoundException e) {  
  159.                         e.printStackTrace();  
  160.                     } catch (IOException e) {  
  161.                         e.printStackTrace();  
  162.                     }  
  163.                     break;  
  164.                 case 2:  
  165.                     Uri uri = data.getData();  
  166.                     img.setImageURI(uri);  
  167.                     ContentResolver cr = this.getContentResolver();  
  168.                     Cursor c = cr.query(uri, nullnullnullnull);  
  169.                     c.moveToFirst();  
  170.                     //这是获取的图片保存在sdcard中的位置  
  171.                     srcPath = c.getString(c.getColumnIndex("_data"));  
  172.                     System.out.println(srcPath+"----------保存路径2");  
  173.                     break;  
  174.                 default:  
  175.                     break;  
  176.             };  
  177.         }  
  178. //      n =1;  
  179.     }  
  180.   
  181.   
  182.     private void submitUploadFile(){  
  183.         final File file=new File(srcPath);  
  184.         final String RequestURL=URLs.UPLOADPHOTO;  
  185.         if (file == null || (!file.exists())) {  
  186.             return;  
  187.         }  
  188.   
  189.         Log.i(TAG, "请求的URL=" + RequestURL);  
  190.         Log.i(TAG, "请求的fileName=" + file.getName());  
  191.         final Map<String, String> params = new HashMap<String, String>();    
  192.         params.put("user_id", loginKey);    
  193.         params.put("file_type""1");    
  194.         params.put("content", img_content.getText().toString());    
  195.         showProgressDialog();  
  196.         new Thread(new Runnable() { //开启线程上传文件  
  197.             @Override  
  198.             public void run() {  
  199.                 uploadFile(file, RequestURL,params);  
  200.             }  
  201.         }).start();  
  202.     }  
  203.   
  204.     /** 
  205.      * android上传文件到服务器 
  206.      * @param file  需要上传的文件 
  207.      * @param RequestURL  请求的rul 
  208.      * @return  返回响应的内容 
  209.      */  
  210.     private String uploadFile(File file,String RequestURL,Map<String, String> param){  
  211.         String result = null;  
  212.         String  BOUNDARY =  UUID.randomUUID().toString();  //边界标识   随机生成  
  213.         String PREFIX = "--" , LINE_END = "\r\n";  
  214.         String CONTENT_TYPE = "multipart/form-data";   //内容类型  
  215.         // 显示进度框  
  216. //      showProgressDialog();  
  217.         try {  
  218.             URL url = new URL(RequestURL);  
  219.             HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
  220.             conn.setReadTimeout(TIME_OUT);  
  221.             conn.setConnectTimeout(TIME_OUT);  
  222.             conn.setDoInput(true);  //允许输入流  
  223.             conn.setDoOutput(true); //允许输出流  
  224.             conn.setUseCaches(false);  //不允许使用缓存  
  225.             conn.setRequestMethod("POST");  //请求方式  
  226.             conn.setRequestProperty("Charset", CHARSET);  //设置编码  
  227.             conn.setRequestProperty("connection""keep-alive");  
  228.             conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY);  
  229.             if(file!=null){  
  230.                 /** 
  231.                  * 当文件不为空,把文件包装并且上传 
  232.                  */  
  233.                 DataOutputStream dos = new DataOutputStream( conn.getOutputStream());  
  234.                 StringBuffer sb = new StringBuffer();  
  235.                   
  236.                 String params = "";    
  237.                 if (param != null && param.size() > 0) {    
  238.                     Iterator<String> it = param.keySet().iterator();    
  239.                     while (it.hasNext()) {    
  240.                         sb = null;    
  241.                         sb = new StringBuffer();    
  242.                         String key = it.next();    
  243.                         String value = param.get(key);    
  244.                         sb.append(PREFIX).append(BOUNDARY).append(LINE_END);    
  245.                         sb.append("Content-Disposition: form-data; name=\"").append(key).append("\"").append(LINE_END).append(LINE_END);    
  246.                         sb.append(value).append(LINE_END);    
  247.                         params = sb.toString();    
  248.                         Log.i(TAG, key+"="+params+"##");    
  249.                         dos.write(params.getBytes());    
  250. //                      dos.flush();    
  251.                     }    
  252.                 }    
  253.                 sb = new StringBuffer();  
  254.                 sb.append(PREFIX);  
  255.                 sb.append(BOUNDARY);  
  256.                 sb.append(LINE_END);  
  257.                 /** 
  258.                  * 这里重点注意: 
  259.                  * name里面的值为服务器端需要key   只有这个key 才可以得到对应的文件 
  260.                  * filename是文件的名字,包含后缀名的   比如:abc.png 
  261.                  */  
  262.                 sb.append("Content-Disposition: form-data; name=\"upfile\";filename=\""+file.getName()+"\""+LINE_END);  
  263.                 sb.append("Content-Type: image/pjpeg; charset="+CHARSET+LINE_END);  
  264.                 sb.append(LINE_END);  
  265.                 dos.write(sb.toString().getBytes());  
  266.                 InputStream is = new FileInputStream(file);  
  267.                 byte[] bytes = new byte[1024];  
  268.                 int len = 0;  
  269.                 while((len=is.read(bytes))!=-1){  
  270.                     dos.write(bytes, 0, len);  
  271.                 }  
  272.                 is.close();  
  273.                 dos.write(LINE_END.getBytes());  
  274.                 byte[] end_data = (PREFIX+BOUNDARY+PREFIX+LINE_END).getBytes();  
  275.                 dos.write(end_data);  
  276.                   
  277.                 dos.flush();  
  278.                 /** 
  279.                  * 获取响应码  200=成功 
  280.                  * 当响应成功,获取响应的流 
  281.                  */  
  282.   
  283.                 int res = conn.getResponseCode();  
  284.                 System.out.println("res========="+res);  
  285.                 if(res==200){  
  286.                     InputStream input =  conn.getInputStream();  
  287.                     StringBuffer sb1= new StringBuffer();  
  288.                     int ss ;  
  289.                     while((ss=input.read())!=-1){  
  290.                         sb1.append((char)ss);  
  291.                     }  
  292.                     result = sb1.toString();  
  293. //                 // 移除进度框  
  294. //                  removeProgressDialog();  
  295.                     finish();  
  296.                 }  
  297.                 else{  
  298.                 }  
  299.             }  
  300.         } catch (MalformedURLException e) {  
  301.             e.printStackTrace();  
  302.         } catch (IOException e) {  
  303.             e.printStackTrace();  
  304.         }  
  305.         return result;  
  306.     }  
  307.   
  308.   
  309. }  

xml代码

[html] view plain copy
 print?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:id="@+id/photo_full"  
  6.     android:orientation="vertical" >  
  7.       
  8.     <ImageView  
  9.         android:id="@+id/img"  
  10.         android:layout_width="fill_parent"  
  11.         android:layout_height="350dp"  
  12.         android:layout_weight="0.6" />  
  13.   
  14.     <EditText  
  15.         android:id="@+id/img_content"  
  16.         android:layout_width="match_parent"  
  17.         android:layout_height="wrap_content"  
  18.         android:layout_weight="0.1"  
  19.         android:ems="10"  
  20.         android:inputType="textMultiLine"  
  21.         android:lines="3" >  
  22.     </EditText>  
  23.       
  24.     <Button  
  25.         android:id="@+id/natives"  
  26.         android:layout_width="fill_parent"  
  27.         android:layout_height="wrap_content"  
  28.         android:layout_weight="0.1"  
  29.         android:text="本地选择" />  
  30.   
  31.     <Button  
  32.         android:id="@+id/pai"  
  33.         android:layout_width="fill_parent"  
  34.         android:layout_height="wrap_content"  
  35.         android:layout_weight="0.1"  
  36.         android:text="拍照上传" />  
  37.   
  38.     <Button  
  39.         android:id="@+id/submit"  
  40.         android:layout_width="fill_parent"  
  41.         android:layout_height="wrap_content"  
  42.         android:layout_weight="0.1"  
  43.         android:text="确定" />  
  44.   
  45. </LinearLayout>  
0 0
原创粉丝点击