請求使用相機權限
如果拍照是應用的必要功能,那麼應該令它在Google Play中僅對有相機的設備可見。爲了讓用戶知道我們的應用需要依賴相機,在Manifest清單文件中添加<uses-feature>
標籤:
<manifest ... >
<uses-feature android:name="android.hardware.camera"
android:required="true" />
...
</manifest>
static final int REQUEST_IMAGE_CAPTURE = 1;
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
注意在調用startActivityForResult()方法之前,先調用resolveActivity(),這個方法會返回能處理該Intent的第一個Activity(譯註:即檢查有沒有能處理這個Intent的Activity)。執行這個檢查非常重要,因爲如果在調用startActivityForResult()時,沒有應用能處理你的Intent,應用將會崩潰。所以只要返回結果不爲null,使用該Intent就是安全的。
獲取縮略圖
拍攝照片並不是應用的最終目的,我們還想要從相機應用那裏取回拍攝的照片,並對它執行某些操作。
Android的相機應用會把拍好的照片編碼爲縮小的Bitmap,使用extra value的方式添加到返回的Intent當中,並傳送給onActivityResult(),對應的Key爲"data"
。下面的代碼展示的是如何獲取這一圖片並顯示在ImageView上。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get("data");
mImageView.setImageBitmap(imageBitmap);
}
}
Note: 這張從
"data"
中取出的縮略圖適用於作爲圖標,但其他作用會比較有限。而處理一張全尺寸圖片需要做更多的工作。