android照相简单案例
main.xml
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<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:orientation="vertical" tools:context="com.mytest.testcamera.MainActivity" > <SurfaceView android:id="@+id/sf_camera" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" /> <Button android:id="@+id/btn_camera" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="照相" /> </LinearLayout>
AndroidMainfest.xml
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mytest.testcamera" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Black.NoTitleBar" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".PictureActivity" > </activity> </application> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> </manifest>
MainActivity
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.mytest.testcamera; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import android.app.Activity; import android.content.Intent; import android.hardware.Camera; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.SurfaceHolder; import android.view.SurfaceHolder.Callback; import android.widget.Button; import android.widget.Toast; import android.view.SurfaceView; import android.view.View; public class MainActivity extends Activity { private SurfaceView cameraPreview; private Button btnCamera; private Camera camera = null; private Callback camerPreCallBack = new Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { // 加载照相预览 startPreview(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { // 停止照相预览 stopPreview(); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); cameraPreview = (SurfaceView) findViewById(R.id.sf_camera); cameraPreview.getHolder().addCallback(camerPreCallBack); btnCamera = (Button) findViewById(R.id.btn_camera); btnCamera.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 拍照 camera.takePicture(null, null, new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { // 把图片数据保存到临时目录 String path = savePictureFile(data); Log.v("info", "image temp path:" + path); if (path != null) { Intent intent = new Intent(MainActivity.this, PictureActivity.class); intent.putExtra("imgPath", path); startActivity(intent); } else { Toast.makeText(MainActivity.this, "保存照片失败", Toast.LENGTH_SHORT).show(); } } }); } }); } /** * 保存照片到临时目录 * * @param bytes * @return */ private String savePictureFile(byte[] bytes) { try { File file = File.createTempFile("camera", "img"); FileOutputStream fos = new FileOutputStream(file); fos.write(bytes); fos.flush(); fos.close(); return file.getAbsolutePath(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } private void startPreview() { camera = Camera.open(); try { camera.setPreviewDisplay(cameraPreview.getHolder()); camera.startPreview(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void stopPreview() { camera.stopPreview(); camera.release(); } @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; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
预览PictureActivity.java
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.mytest.testcamera; import android.app.Activity; import android.net.Uri; import android.os.Bundle; import android.widget.ImageView; public class PictureActivity extends Activity { private ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); imageView = new ImageView(this); setContentView(imageView); String path = getIntent().getStringExtra("imgPath"); if(path!=null){ imageView.setImageURI(Uri.parse(path)); } } }