Android调用相机接口

 Android调用照相功能
 
android 中调用照相功能有两种方法
 

一种是调用系统自带的camera:能够用Intent直接开启

另一种是利用SurfaceView:能够添加自己想要的功能

下面是代码:

方法一

package cn.mydreamy.zhao.photo;

import java.io.File;

import android.app.Activity;

import android.content.Intent;

import android.net.Uri;

import android.os.Bundle;

import android.os.Environment;

import android.provider.MediaStore;

import android.util.Log;

public class Photograph_I extends Activity {

 /** Called when the activity is first created. */

 private String logTag = "Exception";

 @Override
 public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  // setContentView(R.layout.main);

  try {

   Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

   File out = new File(Environment.getExternalStorageDirectory(),
     "camera.jpg");

   Uri uri = Uri.fromFile(out);

   intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);

   startActivityForResult(intent, 0);

  } catch (Exception e) {

   e.printStackTrace();

  }

 }

 protected void onActivityResult(int requestCode, int resultCode, Intent data)

 {

  try {

   Log.v("", "requestCode = " + requestCode + " resultCode =  "
     + resultCode);

   if (requestCode != 0) {

    return;

   }

   if (resultCode == 0) {

    finish();

    return;

   }

   // Bundle extras = data.getExtras();

   // Bitmap b = (Bitmap) extras.get("data");

   Intent intent = new Intent();

   intent.setClass(this, ShowImageActivity.class);

   // intent.putExtra("image",b);

   this.startActivity(intent);

  } catch (Exception e) {

   // TODO: handle exception

   Log.v(logTag, e.getMessage());

  }

 }

}

 

另一个类

 package cn.mydreamy.zhao.photo;

import cn.mydreamy.zhao.photo.R;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.ImageView;

public class ShowImageActivity extends Activity {
 private String logTag = "exception";
 private AlertDialog alertDialog;
 private ImageView view;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.show);
  try {
   view = (ImageView) findViewById(R.id.view);
   // Bundle bundle = this.getIntent().getExtras();
   // Bitmap b = bundle.getParcelable("image");
   String pathString = Environment.getExternalStorageDirectory()
     .toString()
     + "/camera.jpg";
   Log.v("", "pathString = " + pathString);
   Bitmap b = BitmapFactory.decodeFile(pathString);
   view.setImageBitmap(b);
   // setContentView(view);
   alertDialog = new AlertDialog.Builder(ShowImageActivity.this)
     .setMessage("Feels Like IS感觉就像IS尽量晃动手机,体验IS的无限动感。")
     .setPositiveButton("ok",
       new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog,
          int whichButton) {
         /* User clicked OK so do some stuff */
        }
       }).setNegativeButton("cancle",
       new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog,
          int whichButton) {
         /* User clicked Cancel so do some stuff */
        }
       }).create();
   alertDialog.show();
  } catch (Exception e) {
   Log.v(logTag, e.getMessage());
   throw new RuntimeException(e);

  }
 }

 @Override
 public boolean onTouchEvent(MotionEvent event) {
  // TODO Auto-generated method stub
  Log.v("", "event = " + event.getX());
  return super.onTouchEvent(event);
 }

}
show.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
  <SurfaceView android:id="@+id/camera"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
<ImageView android:id="@+id/image"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</LinearLayout>

 

方法2:

package cn.mydreamy.zhao.photo;

import java.io.IOException;


import cn.mydreamy.zhao.photo.R;

import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.AutoFocusCallback;
import android.hardware.Camera.Parameters;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.ShutterCallback;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.SurfaceHolder.Callback;
import android.view.View.OnClickListener;
import android.widget.ImageView;

public class Photograph_S extends Activity implements Callback, OnClickListener {
 /** Called when the activity is first created. */
 private SurfaceView mSurfaceView;
 private SurfaceHolder mSurfaceHolder;
 private Camera mCamera;
 private boolean mPreviewRunning;
 private ImageView mImageView;

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  this.requestWindowFeature(Window.FEATURE_NO_TITLE);
  getWindow().setFormat(PixelFormat.TRANSLUCENT);
  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN);
  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
  setContentView(R.layout.main);
  mSurfaceView = (SurfaceView) findViewById(R.id.camera);
  mImageView = (ImageView) findViewById(R.id.image);
  mImageView.setVisibility(View.GONE);
  mSurfaceView.setOnClickListener(this);
  mSurfaceHolder = mSurfaceView.getHolder();
  mSurfaceHolder.addCallback(this);
  mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
 }

 @Override
 public void surfaceChanged(SurfaceHolder holder, int format, int width,
   int height) {
  if (mPreviewRunning) {
   mCamera.stopPreview();
  }
  Parameters params = mCamera.getParameters();
  params.setPictureFormat(PixelFormat.JPEG);// 设置图片格式

  // params.setPreviewSize(width, height);
  params.set("rotation", 90);
  mCamera.setParameters(params);
  try {
   mCamera.setPreviewDisplay(holder);
  } catch (IOException e) {
   e.printStackTrace();
  }
  mCamera.startPreview();
  mPreviewRunning = true;
 }

 private AutoFocusCallback mAutoFocusCallBack = new AutoFocusCallback() {

  @Override
  public void onAutoFocus(boolean success, Camera camera) {

   Log.v("AutoFocusCallback", "AutoFocusCallback" + success);
   Camera.Parameters Parameters = mCamera.getParameters();
   Parameters.setPictureFormat(PixelFormat.JPEG);// 设置图片格式
   mCamera.setParameters(Parameters);
   mCamera.takePicture(mShutterCallback, null, mPictureCallback);
  }
 };

 @Override
 public void surfaceCreated(SurfaceHolder holder) {
  // TODO Auto-generated method stub
  mCamera = Camera.open();
 }

 @Override
 public void surfaceDestroyed(SurfaceHolder holder) {
  // TODO Auto-generated method stub
  mCamera.stopPreview();
  mPreviewRunning = false;
  mCamera.release();
  mCamera = null;
 }

 /**
  * 拍照的回调接口
  */
 PictureCallback mPictureCallback = new PictureCallback() {
  @Override
  public void onPictureTaken(byte[] data, Camera camera) {
   Log.v("PictureCallback", "…onPictureTaken…");
   if (data != null) {
    Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0,
      data.length);
    mImageView.setImageBitmap(bitmap);
    mImageView.setVisibility(View.VISIBLE);
    mSurfaceView.setVisibility(View.GONE);
    if (mPreviewRunning) {
     mCamera.stopPreview();
     mPreviewRunning = false;
    }
   }
  }
 };
 /**
  * 在相机快门关闭时候的回调接口,通过这个接口来通知用户快门关闭的事件,
  * 普通相机在快门关闭的时候都会发出响声,根据需要可以在该回调接口中定义各种动作, 例如:使设备震动
  */
 ShutterCallback mShutterCallback = new ShutterCallback() {

  public void onShutter() {
   // just log ,do nothing
   Log.v("ShutterCallback", "…onShutter…");
  }

 };

 public boolean onKeyDown(int keyCode, KeyEvent event) {
  if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
   if (mCamera != null) {
    // mCamera.takePicture(null, null,mPictureCallback);
    mCamera.autoFocus(mAutoFocusCallBack);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
   }
  }
  return super.onKeyDown(keyCode, event);
 }

 @Override
 public void onClick(View arg0) {
  // TODO Auto-generated method stub
  Log.v("onClick", "…onClick…");
  mCamera.autoFocus(mAutoFocusCallBack);
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  
  menu.add(0, 1, 0, "调用系统照相机");
  return true;
 }

 @Override
 public boolean onMenuItemSelected(int featureId, MenuItem item) {
  // TODO Auto-generated method stub
  switch(item.getItemId()){
  case 1:
  Intent intent = new Intent();
  intent.setClass(Photograph_S.this, Photograph_I.class);
  startActivity(intent);
  break;
  }
  return true;
 }
}
main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
  <SurfaceView android:id="@+id/camera"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
<ImageView android:id="@+id/image"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</LinearLayout>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值