android总结之照片上传

暑假,参加一个比赛,做了一个android的小项目,由于时间的关系,没能按时完成。开学已经大三了,决定还是把.NET学通了再继续android。但是毕竟花了一暑假在android上,所以决定利用空闲时间把暑假学到和用到的android知识做个总结。希望借此加深记忆,也为以后重拾android做个参考。这是本系列的第一篇,也是在园子里开博5个月以来的写的第二篇博客(真是惭愧),以后要坚持下去。

首先获得图片并在ImageButton上显示,获取图片有两种方式:拍照上传和本地上传,都是通过Intent和StartActivityForResult调用系统组件,在onActivityResult事件中取得图片,进行显示和上传 。直接上代码吧!

 activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:background="#ffffff">

    <LinearLayout android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >
        <EditText android:id="@+id/et_addRecord_txt"
            style="@style/textview"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:inputType="textMultiLine"
            android:lines="5"
            android:gravity="top"
            android:hint="在这里记下你的所见所闻吧!"/>
            
            
            <ImageButton 
                android:id="@+id/ib_uploadImg"
                android:layout_width="200dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:background="@drawable/compose_pic_default"
                android:scaleType="centerCrop">
            </ImageButton>        
    </LinearLayout>
    
</RelativeLayout>  

MainActivity.java

package com.CodingBird.uploadphoto;

import java.util.ArrayList;
import java.util.List;

import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.database.DataSetObserver;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.support.v4.app.NavUtils;

public class MainActivity extends Activity {
    private ImageButton img;
    private ListView itemList;
    private Bitmap photo;
    private int REQUEST_CODE_PHOTOGRAPH=11;
    private int REQUEST_CODE_LOCPIC = 12;
    private Dialog dialog;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        
        img = (ImageButton)findViewById(R.id.ib_uploadImg);
        img.setOnClickListener(new OnClickListener() {
            public void onClick(View arg0) {
                chooseType();
            }
        });
    }
    /**
     * 选择获取图片的方式
     
*/
    private void chooseType(){
        dialog = new Dialog(MainActivity.this,R.style.dialog);
        View dialogView = getLayoutInflater().inflate(R.layout.photo_dialog, null);
        itemList = (ListView)dialogView.findViewById(R.id.itemList);
        itemList.setAdapter(new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_expandable_list_item_1,getData()));
        itemList.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> parent, View conventView, int position,
                    long id) {
                String state = Environment.getExternalStorageState();
                if(state.equals(Environment.MEDIA_MOUNTED)){
                    if(position==0){      //拍照上传
                        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
                        startActivityForResult(intent, REQUEST_CODE_PHOTOGRAPH);
                    }else if(position ==1){    //本地上传
                        Intent intent = new Intent();
                        intent.setType("image/*");
                        intent.setAction(Intent.ACTION_GET_CONTENT);
                        startActivityForResult(intent, REQUEST_CODE_LOCPIC);
                    }
                }else{
                    Toast.makeText(MainActivity.this,"sd卡不存在", Toast.LENGTH_LONG).show();
                }
                
            }
        });
        dialog.setContentView(dialogView);
        
        //dialog.setTitle("上传照片");
        
        dialog.show();
    }

    private List<String> getData(){
        List<String> data = new ArrayList<String>();
        data.add("拍照上传");
        data.add("本地上传");
        return data;
    }
    
    /*
     * 处理拍摄后得到的图片(non-Javadoc)
     * @see android.app.Activity#onActivityResult(int, int, android.content.Intent)
     
*/
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        dialog.dismiss();
        if(data!=null&&requestCode==REQUEST_CODE_PHOTOGRAPH){   //拍照上传时
            Bundle extras = data.getExtras();
            if(extras!=null){
                photo = (Bitmap)extras.get("data");
                img.setImageBitmap(photo);
                //saveImage();
            }else{
                Toast.makeText(MainActivity.this,"未找到图片", Toast.LENGTH_LONG).show();
            }
        }
        if(resultCode==Activity.RESULT_OK)
        {
            /**
             * 当选择的图片不为空的话,在获取到图片的途径 
             
*/
            Uri uri = data.getData();
            try {
                String[] pojo = {MediaStore.Images.Media.DATA};
                 
                @SuppressWarnings("deprecation")
                Cursor cursor = managedQuery(uri, pojo, nullnull,null);
                if(cursor!=null)
                {
                    ContentResolver cr = this.getContentResolver();
                    int colunm_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                    cursor.moveToFirst();
                    String path = cursor.getString(colunm_index);
                    /***
                     * 这里加这样一个判断主要是为了第三方的软件选择,比如:使用第三方的文件管理器的话,你选择的文件就不一定是图片了,这样的话,我们判断文件的后缀名
                     * 如果是图片格式的话,那么才可以  
                     
*/
                    if(path.endsWith("jpg")||path.endsWith("png"))
                    {
                        photo = BitmapFactory.decodeStream(cr.openInputStream(uri));
                        img.setImageBitmap(photo);
                    }else{
                        
                    }
                }else{
                
                }
                 
            } catch (Exception e) {
                
            }
        }
        
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

 }  
   


点击图片弹出的对话框,采用自定义的视图,用到的xml文件:photo_dialog.xml代码如下

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  

  xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:background="#ffffff"
    android:orientation="vertical">
    
    <TextView android:id="@+id/tv_title"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="22dp"
        android:textColor="#ffffff"
        android:text="上传图片"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:background="#000000"
        />
    <ListView android:id="@+id/itemList"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        
    </ListView>

</LinearLayout>

 以上只是实现了获得拍照和本地的图片,并未实现上传功能,在下一篇将实现向服务器上传功能。

 源码下载

posted @ 2012-09-18 22:26  CodingBird  阅读(408)  评论(0编辑  收藏  举报