學習Android不能不學習照相機,現在各種美容相機,微信朋友圈發圖,現在升級之後直接下拉就可以照相了,各種艷照的的源頭也是照相機,扯遠了,有點邪惡了,還是簡單學習一下Android中照相機的使用,Android中照相機的使用一般分為兩種使用已有的照相App(可以理解為系統內置的照相機)和單獨創建一個照相App,第一種方式簡單易懂,第二種方式如果做的好的話可以養活一個公司~今天就簡單的描述一下第一種的調用~
基礎工作
調用照相機需要照相,照相就需要存儲,存在外部存儲中需要設置權限,本次設置的三個權限:一個是調用Camera權限,第二個是要求設備有照相機,第三個是在外部設備寫的權限:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
簡單的頁面,一個Buttom,一個ImageView:
Demo實現
簡單的三部曲,首先創建Intent,然後啟動Intent,最後接收結果,沒有前置攝像頭,就用的是模擬的:
拍照事件:
public void cameraEvent(View view) {
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 創建一個意圖去獲取圖片
file= getOutputMediaFile(); // 獲取路徑
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); // 設置文件名
// 啟動Intent
startActivityForResult(intent, IMAGE_REQUEST_CODE);
}
獲取文件路徑的方法:
// 圖片路徑
private static File getOutputMediaFile() {
File mediaStorageDir = new File(
Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
tag);
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
Log.d(tag, "存儲目錄創建失敗");
return null;
}
}
// 創建文件名
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss")
.format(new Date());
File mediaFile = null;
mediaFile = new File(mediaStorageDir.getPath() + File.separator
+ "IMG_" + timeStamp + ".jpg");
Log.d(tag, "存儲目錄:" + mediaFile);
return mediaFile;
}
完成之後的接收事件需要重寫Activity中的onActivityResult方法:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if(requestCode == IMAGE_REQUEST_CODE&&resultCode==RESULT_OK) {
imageView=(ImageView) findViewById(R.id.camera_img);
//兩種設置方式
//圖片較大的時候可以使用這種
Bitmap bitmap=BitmapFactory.decodeFile(file.toString());
imageView.setImageBitmap(bitmap);
// imageView.setImageURI(Uri.fromFile(file));
}
super.onActivityResult(requestCode, resultCode, data);
}