通過(guò)以下兩種方式,可以在應(yīng)用程序中使用攝像機(jī)
使用現(xiàn)有應(yīng)用程序中Android攝像頭應(yīng)用程序
直接使用應(yīng)用程序提供的Android攝像頭API
使用 MediaStore.ACTION_IMAGE_CAPTURE 啟動(dòng)安裝在手機(jī)上的攝像頭應(yīng)用程序。它的語(yǔ)法下面給出:
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
除了以上,也可以通過(guò) MediaStore 提供其它可用的意圖。它們列出如下
| Sr.No | 意圖類型和說(shuō)明 |
|---|---|
| 1 |
ACTION_IMAGE_CAPTURE_SECURE 它返回照相機(jī)拍攝到的圖像,設(shè)備被固定 |
| 2 |
ACTION_VIDEO_CAPTURE 它調(diào)用已有的視頻應(yīng)用程序在Android中捕獲視頻 |
| 3 |
EXTRA_SCREEN_ORIENTATION 它是用來(lái)在屏幕的方向設(shè)置:垂直或橫向 |
| 4 |
EXTRA_FULL_SCREEN 它被用來(lái)控制ViewImage的用戶接口 |
| 5 |
INTENT_ACTION_VIDEO_CAMERA 這個(gè)意圖是用來(lái)啟動(dòng)攝像機(jī)在視頻模式 |
| 6 |
EXTRA_SIZE_LIMIT 它用于指定的視頻或圖像捕獲尺寸大小限制 |
現(xiàn)在使用startActivityForResult()函數(shù)推出活動(dòng),并等待它的結(jié)果。它的語(yǔ)法下面給出:
startActivityForResult(intent,0)
這種方法已在活動(dòng) activity 類被定義。從主活動(dòng)調(diào)用它。有在做同樣的工作的活動(dòng)類中定義的方法,但是當(dāng)它不是從活動(dòng)要求,但在其他地方使用。它們被列在下面:
| Sr.No | 活動(dòng)功能說(shuō)明 |
|---|---|
| 1 |
startActivityForResult(Intent intent, int requestCode, Bundle options) 它開(kāi)始的活動(dòng),但可以利用它選擇額外的包 |
| 2 |
startActivityFromChild(Activity child, Intent intent, int requestCode) 啟動(dòng)活動(dòng)時(shí),活動(dòng)是任何其他活動(dòng)的子活動(dòng) |
| 3 |
startActivityFromChild(Activity child, Intent intent, int requestCode, Bundle options) 它的工作與上述相同,但它可以在捆綁與它的形狀采取額外的值 |
| 4 |
startActivityFromFragment(Fragment fragment, Intent intent, int requestCode) 它啟動(dòng)的碎片活動(dòng)當(dāng)前所在內(nèi)部 |
| 5 |
startActivityFromFragment(Fragment fragment, Intent intent, int requestCode, Bundle options) 它不僅啟動(dòng)從碎片的活性,但可以采用額外的值 |
不管用來(lái)啟動(dòng)其活動(dòng)功能,它們都返回結(jié)果。其結(jié)果可以通過(guò)覆蓋 onActivityResult 方法獲得。
這里有一個(gè)例子,說(shuō)明如何啟動(dòng)現(xiàn)有的攝像機(jī)應(yīng)用程序捕獲的圖像和位圖的形式顯示結(jié)果
為了試驗(yàn)這個(gè)例子,需要在支持?jǐn)z像機(jī)的實(shí)際設(shè)備上運(yùn)行此應(yīng)用程序。
| Steps | 描述 |
|---|---|
| 1 | 使用Eclipse IDE創(chuàng)建Android應(yīng)用程序,并將其命名為Camera。在創(chuàng)建這個(gè)項(xiàng)目,確保目標(biāo)SDK編譯在Android SDK中的最新版本或使用更高級(jí)別的API。 |
| 2 | 修改src/MainActivity.java 文件中添加意圖啟動(dòng)活動(dòng)代碼,由result方法來(lái)接受輸出。 |
| 3 | 修改所需的布局XML文件 res/layout/activity_main.xml 添加GUI組件。在這里,我們只添加ImageView和一個(gè)TextView |
| 4 | 修改res/values/strings.xml 定義所需的常量值 |
| 5 | 運(yùn)行應(yīng)用程序并選擇運(yùn)行Android設(shè)備,并在其上安裝的應(yīng)用和驗(yàn)證結(jié)果。 |
以下是修改后的主活動(dòng)文件的內(nèi)容:src/com.yiibai.camera/MainActivity.java.
package com.example.camera; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; public class MainActivity extends Activity { ImageView imgFavorite; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imgFavorite = (ImageView)findViewById(R.id.imageView1); imgFavorite.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { open(); } }); } public void open(){ Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, 0); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); Bitmap bp = (Bitmap) data.getExtras().get("data"); imgFavorite.setImageBitmap(bp); } @Override public boolean onCreateOptionsMenu(Menu menu) { /