您的位置:首页 > 移动开发 > Android开发

Android开发学习之调用系统相机完成拍照的实现

2013-12-04 18:44 645 查看
今天本来想写一篇关于百度地图定位SDK的文章的,无奈根据官网提供的例子编写的程序始终无法运行,所以这个计划只能落空。那么今天要与大家分享的是Camera,即照相机。随着硬件能力的大幅提升,手机上各种依托硬件的应用层出不群。在所有硬件中,照相机功能无疑是最常用的功能。那么,我们今天就来做一个简单的照相机吧。这个例子在很多场景中都会用到,比如在QQ空间里拍照然后分享给好友,在有道云笔记里拍照完成图像笔记的编辑等。在Android中,我们有两种方式来开发照相机的应用。一种是采用Camera类,进行原生应用的开发,这种开发方式涉及的技术相对较多,开发难度相对较大;一种是调用系统内置的照相机应用,然后和我们自己的应用完成交互,这种方式显然简单地多。所以,今天我们在这里选择后一种方式,即调用系统内置的照相机来完成拍照。通过对Android的了解,我们知道,所有对于系统内置的应用都可以通过意图的方式来实现,如发短信、发邮件、打电话等常用的操作。这告诉两了我们一个道理,很多时候,当系统已经有这样的功能时,最简单的方式就是去调用它,而不是去开发它,除非你想做一个完全和系统不一样的应用。

首先,布局代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
    <ImageView
        android:id="@+id/ImageView"
        android:layout_width="match_parent"
        android:layout_height="390dp"
        android:contentDescription="@string/Description"
        android:scaleType="fitXY"
        android:src="@drawable/view" />
    <Button
        android:id="@+id/BtnPlay"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/BtnPlay" />
</LinearLayout>
在这里我们使用一个ImageView来显示我们拍摄的照片,使用一个Button来触发拍照的事件。后台代码如下:

package com.Camera.camera;

import android.os.Bundle;
import android.provider.MediaStore;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity {

	ImageView iv;
	Button BtnPlay;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		iv=(ImageView)findViewById(R.id.ImageView);
		BtnPlay=(Button)findViewById(R.id.BtnPlay);
		BtnPlay.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View arg0) 
			{
				try
				{
                                      Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                                      startActivityForResult(intent, 0); 	
				}
				catch(Exception e)
				{
					Log.e("Exception", e.getMessage());
				}
			}
		});
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) 
	{
		if(requestCode==0)
		{
		   super.onActivityResult(requestCode, resultCode, data);
                   Bundle Extras = data.getExtras(); 
                   Bitmap mBitmap = (Bitmap)Extras.get("data"); 
                   iv.setImageBitmap(mBitmap);
		}
		else
		{
			Toast.makeText(this, "您没有拍摄照片!", Toast.LENGTH_SHORT).show();
		}
	}

	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}


首先我们为Button注册Click事件,在Click事件中我们定义了一个调用拍照意图的Intent,然后调用这个Intent。因为这里需要返回一个值,即我们拍的照片,所以徐雅使用startActivityForResult()方法。于此同时,我们覆盖Activity的onActivityResult()方法,来处理返回值,即根据返回的值来生成一个Bitmap以填充ImageView,完成整个拍照的过程。运行结果如图(哈哈,V粉不解释,拍得太难看就不上传了)




今天的内容就是这样啦,有时间再研究下百度定位SDK的例子。话说百度写的例子我还真看不懂啊,那个语音识别的SDK就搞的得云里雾里的,唉,继续努力吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: