<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.entel.research"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".TakePicture"
android:configChanges="orientation|keyboardHidden"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
android:screenOrientation="landscape"
android:clearTaskOnLaunch="true"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-sdk android:minSdkVersion="3" />
</manifest>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/camera"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<SurfaceView
android:id="@+id/surface_camera"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:orientation="horizontal"
android:screenOrientation="landscape" >
</SurfaceView>
<ImageButton
android:id="@+id/shutter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginRight="5dip"
android:layout_marginTop="5dip"
android:clickable="true"
android:focusable="true"
android:src="@drawable/ic_camera_indicator_photo" >
</ImageButton>
<ImageButton
android:id="@+id/finish"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="5dip"
android:layout_marginRight="5dip"
android:scaleType="center"
android:src="@drawable/shezhi" >
</ImageButton>
</RelativeLayout>
package com.entel.research;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageButton;
import android.widget.Toast;
public class TakePicture extends Activity implements SurfaceHolder.Callback
{
private Camera mCamera;
private boolean mPreviewRunning = true;
public static final int ITEM0 = Menu.FIRST;
public static final int ITEM1 = Menu.FIRST + 1;
public static final int ITEM2 = Menu.FIRST + 2;
byte[] data;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getWindow().setFormat(PixelFormat.TRANSLUCENT);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.com_camera1_main);
SurfaceView mSurfaceView;
ImageButton shutter;
ImageButton finish;
mSurfaceView = (SurfaceView) findViewById(R.id.surface_camera);
shutter = (ImageButton) findViewById(R.id.shutter);
finish = (ImageButton) findViewById(R.id.finish);
shutter.setOnClickListener(shutter1);
finish.setOnClickListener(finish1);
SurfaceHolder mSurfaceHolder = mSurfaceView.getHolder();
mSurfaceHolder.addCallback(this);
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu);
menu.add(0, ITEM0, 0, "摄像");
menu.add(0, ITEM1, 1, "设置");
menu.add(0, ITEM2, 2, "退出");
menu.findItem(ITEM1);
return true;
}
private OnClickListener shutter1 = new OnClickListener()
{
@Override
public void onClick(View ic_camera_indicator_photo)
{
mCamera.takePicture(shutter2, raw, jpegCallback);
}
};
private OnClickListener finish1 = new OnClickListener()
{
@Override
public void onClick(View shezhi)
{
TakePicture.super.openOptionsMenu();
}
};
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h)
{
if (mPreviewRunning)
{
mCamera.stopPreview();
}
Camera.Parameters p = mCamera.getParameters();
p.setPreviewSize(w, h);
p.set("rotation", 90);
mCamera.setParameters(p);
try
{
mCamera.setPreviewDisplay(holder);
}
catch (IOException e)
{
e.printStackTrace();
}
mCamera.startPreview();
mPreviewRunning = true;
}
@Override
public void surfaceCreated(SurfaceHolder holder)
{
mCamera = Camera.open();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
mCamera.stopPreview();
mPreviewRunning = false;
mCamera.release();
}
Camera.PictureCallback raw = new Camera.PictureCallback()
{
public void onPictureTaken(byte[] imageData, Camera c)
{
}
};
private PictureCallback jpegCallback = new PictureCallback()
{
public void onPictureTaken(byte[] _data, Camera _camera)
{
/* onPictureTaken传入的第一个参数即为相片的byte */
data = _data;
showDialog(1);
}
};
Camera.ShutterCallback shutter2 = new Camera.ShutterCallback()
{
public void onShutter()
{
}
};
private Dialog buildDialog(Context context)
{
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("是否储存照片");
builder.setPositiveButton("存储", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface arg0, int arg1)
{
savepicture(data);
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
mCamera.startPreview();
}
});
return builder.create();
};
public Dialog onCreateDialog(int i)
{
switch (i)
{
case 1:
return buildDialog(TakePicture.this);
}
return null;
};
public void savepicture(byte[] _data)
{
Bitmap bm = BitmapFactory.decodeByteArray(_data, 0, _data.length);
/* 创建新文件 */
File myCaptureFile = new File("/sdcard/" + System.currentTimeMillis()
+ ".jpg");
try
{
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));
bm.compress(Bitmap.CompressFormat.JPEG, 80, bos); /* 采用压缩转档方法 */
bos.flush();
bos.close();
Thread.sleep(3000);
mCamera.startPreview();
}
catch (Exception e)
{
Log.e("camera", e.getMessage());
}
Toast.makeText(TakePicture.this,
"照片存储路径:" + "/sdcard/" + System.currentTimeMillis() + ".jpg",
Toast.LENGTH_LONG).show();
}
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case ITEM0:
break;
case ITEM1:
break;
case ITEM2:
System.exit(0);
break;
}
return super.onOptionsItemSelected(item);
}
}