안 드 로 이 드 호출 시스템 카 메 라 를 페이지 로 되 돌려 로 컬 에 저장 하고 그림 을 문자열 로 변환 합 니 다.

8159 단어
이 프로그램 은 안 드 로 이 드 가 가지 고 있 는 카 메 라 를 호출 하여 이미지 view 에 그림 을 되 돌려 주 고 메모리 카드 를 읽 어 메모리 카드 에 저장 할 수 있 으 며 서버 에 업로드 할 수 있 도록 문자열 로 변환 할 수 있 습 니 다.
필요 한 패 키 지 는 comons - codec - 1.5. jar 입 니 다.
< -- layout 레이아웃 -- >

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFD3D7DF" >

    <LinearLayout
        android:id="@+id/takePicturePhone"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginBottom="10dip"
        android:layout_marginLeft="10dip"
        android:layout_marginRight="10dip"
        android:layout_marginTop="10dip"
        android:background="@drawable/bg_frame"
        android:gravity="center_vertical"
        android:orientation="vertical"
        android:paddingBottom="2dip"
        android:paddingLeft="10dip"
        android:paddingRight="10dip"
        android:paddingTop="10dip" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >

            <ImageButton
                android:id="@+id/takePhone"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/takepicture" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="154dp" >

            <ImageView
                android:id="@+id/preview"
                android:layout_width="wrap_content"
                android:layout_height="92dp" />
        </LinearLayout>
    </LinearLayout>

</LinearLayout>


<--activity-->

package zhang.xue.yi;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.codec.binary.Base64;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;

/**
 *   
 * 
 * @author Mr.Z
 * @time 2012-5-16
 * 
 */
public class TakePhotoActivity extends Activity {
	private Context context = TakePhotoActivity.this;

	private ImageButton btnTakePhone;
	private String path;
	private ImageView imageView;
	private Bitmap[] bmps = new Bitmap[6];
	private Bundle bundle;

	private LinearLayout takePicturePhone = null;

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.setContentView(R.layout.locationapp);

		takePicturePhone = (LinearLayout) findViewById(R.id.takePicturePhone);
		useTakePicture();

	}

	/**
	 *       
	 */
	private void useTakePicture() {
		imageView = (ImageView) this.findViewById(R.id.preview);
		btnTakePhone = (ImageButton) findViewById(R.id.takePhone);
		btnTakePhone.setOnTouchListener(new OnTouchListener() {

			@Override
			public boolean onTouch(View v, MotionEvent event) {
				if (event.getAction() == MotionEvent.ACTION_DOWN) {
					//            
					bmps[0] = BitmapFactory.decodeResource(getResources(), R.drawable.takepicture2);
					btnTakePhone.setImageBitmap(bmps[0]);
				} else if (event.getAction() == MotionEvent.ACTION_UP) {
					//         
					bmps[1] = BitmapFactory.decodeResource(getResources(), R.drawable.takepicture);
					btnTakePhone.setImageBitmap(bmps[1]);
				}
				return false;
			}
		});
		btnTakePhone.setOnClickListener(new Button.OnClickListener() {
			public void onClick(View arg0) {
				Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
				startActivityForResult(intent, 1);
			}
		});
	}

	/**
	 *      
	 */
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		if (resultCode == Activity.RESULT_OK) {
			String sdStatus = Environment.getExternalStorageState();
			if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { //   sd    
				Toast.makeText(context, "SD    !", 1000);
				return;
			}
			bundle = data.getExtras();
			Bitmap bitmap = (Bitmap) bundle.get("data");//          ,    Bitmap    
			FileOutputStream b = null;
			File file = new File("/sdcard/channel/");
			file.mkdirs();//      
			path = "/sdcard/channel/" + formatDatetime(new Date(), "yyyyMMddHHmmss") + ".jpg";
			try {
				System.out.println("path:" + path);
				b = new FileOutputStream(path);
				bitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);//        
				getImageBinary();
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} finally {
				try {
					b.flush();
					b.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			this.imageView.setImageBitmap(bitmap);//       ImageView 
		}
	}

	/**
	 *         [BASE64]
	 * 
	 * @return
	 */
	public String getImageBinary() {
		System.out.println("path--->" + path);
		try {
			FileInputStream fis = new FileInputStream(path);
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			byte[] buffer = new byte[8192];
			int count = 0;
			while ((count = fis.read(buffer)) >= 0) {
				baos.write(buffer, 0, count);

			}
			String uploadBuffer = new String(Base64.encodeBase64(baos.toByteArray()));
			fis.close();
			System.out.println("           :---->" + uploadBuffer);
			return uploadBuffer;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		return null;
	}

	/**
	 *                 
	 * 
	 * @param format     , yyyyMMdd
	 * @return dateTimeString
	 */
	public static String formatDatetime(Date date, String format) {
		DateFormat df = new SimpleDateFormat(format);
		return df.format(date);
	}
}

< -- 권한 -- >

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

좋은 웹페이지 즐겨찾기