下面我們一起看一下在網路攝影機應用中如何使用這個介面,首先看一下在Android編程環境中的onCreate方法,看完本文你肯定有不少收穫,希望本文能教會你更多東西。
前的智能手機擁有很多強大的功能,例如網路攝影機、GPS和無線上網等,現在是我們開始充分使用這些功能的時候了。在本篇文章中我們一起學習,如何在GoogleAndroid編程環境中,以最簡單的方式實現GoogleAndroid網路攝影機拍照。
- super.onCreate(icicle);
-
- getWindow().setFormat(PixelFormat.TRANSLUCENT);
-
- requestWindowFeature(Window.FEATURE_NO_TITLE);
-
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
-
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
-
- setContentView(R.layout.camera);
-
- mSurfaceView = (SurfaceView) findViewById(R.id.surface_camera);
-
- mSurfaceHolder = mSurfaceView.getHolder();
-
- mSurfaceHolder.addCallback(this);
-
- mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
-
- }
在本文樣本中,我們需要用到兩個檔案:布局檔案和Activity檔案。數日前,Android編程環境(代號cupcake)新版發布,在安全方面有諸多改進。其中之一與網路攝影機許可權控制有關。在此之前,你能夠建立無需使用者許可就可實現拍照的應用。現在該問題已被修複,如果你想在自己的應用中使用網路攝影機,需要在AndroidManifest.xml中增加以下代碼:
- super.onCreate(icicle);
-
- getWindow().setFormat(PixelFormat.TRANSLUCENT);
-
- requestWindowFeature(Window.FEATURE_NO_TITLE);
-
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
-
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
-
- setContentView(R.layout.camera);
-
- mSurfaceView = (SurfaceView) findViewById(R.id.surface_camera);
-
- mSurfaceHolder = mSurfaceView.getHolder();
-
- mSurfaceHolder.addCallback(this);
-
- mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
-
- }
這是開發工作的基礎,也就是說我們希望在應用程式中增加多少輔助性元素,如網路攝影機各種功能按鈕等。在本文中我們採取最簡方式,除了拍照外,沒有多餘網路攝影機功能。下面我們一起看一下本文樣本將要用到的布局檔案“camera_surface.xml”。
小提示:記住不要在資源檔名稱中使用大寫字母,如果你把該檔案命名為“CameraSurface.xml”,會給你帶來不必要的麻煩。該布局非常簡單,只有一個LinearLayout視圖組,在它下面只有一個SurfaceView視圖,也就是我們的網路攝影機螢幕。
該方法讓網路攝影機做好拍照準備,設定它的參數,並開始在Android編程環境螢幕中啟動預覽畫面。我使用了一個“semaphore”參數來防止衝突:當mPreviewRunning為true時,意味著網路攝影機處於啟用狀態,並未被關閉,因此我們可以使用它。
通過這個方法,我們停止網路攝影機,並釋放相關的資源。正如大家所看到的,我們在這兒設定mPreviewRunning為false。以此來防止在surfaceChanged方法中的衝突。原因何在?因為這意味著我們已經關閉了網路攝影機,而且我們不能再設定其參數或在網路攝影機中啟動映像預覽。