Android Camera Api的心得
Android從Camera中獲取圖片的兩種方法
通過以下兩種方式,可以在應(yīng)用程序中使用攝像機(jī)
- 使用現(xiàn)有應(yīng)用程序中Android攝像頭應(yīng)用程序
- 直接使用應(yīng)用程序提供的Android攝像頭APP
使用現(xiàn)有應(yīng)用程序的Android攝像頭應(yīng)用程序
使用MediaStore.ACTION_IMAGE_CAPTURE啟動安裝在手機(jī)上的攝像頭應(yīng)用程序辕近。它的語法下面給出:
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
除了以上蕊退,也可以通過MediaStore提供其它可用的意圖锉矢。它們列出如下
ACTION_IMAGE_CAPTURE_SECURE它返回照相機(jī)拍攝到的圖像础淤,設(shè)備被固定
ACTION_VIDEO_CAPTURE它調(diào)用已有的視頻應(yīng)用程序在Android中捕獲視頻
EXTRA_SCREEN_ORIENTATION它是用來在屏幕的方向設(shè)置:垂直或橫向
EXTRA_FULL_SCREEN它被用來控制ViewImage的用戶接口
INTENT_ACTION_VIDEO_CAMERA這個意圖是用來啟動攝像機(jī)在視頻模式
EXTRA_SIZE_LIMIT它用于指定的視頻或圖像捕獲尺寸大小限制
現(xiàn)在使用startActivityForResult()函數(shù)推出活動肤舞,并等待它的結(jié)果图仓。它的語法下面給出:
startActivityForResult(intent,0)
返回結(jié)果,其結(jié)果可以通過覆蓋onActivityResult方法獲得
startActivity(Intent intent, Int requestCode)中的requestCode用于回收Bundle時的識別揭厚。
相關(guān)函數(shù):
startActivityForResult(Intent intent, Int requestCode)
setResut(int resultCode, Intent intent)
onActivityResult(int requestCode, int resultCode, Intent intent)
eg:
MainActivity
//在onCreate中添加btn的onClick
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent,0);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
Bitmap bp = (Bitmap)data.getExtras().get("data");
imgFavorite.setImageBitmap(bp);
}
補(bǔ)充:startActivityForResult
- 上傳頭像
點(diǎn)擊頭像后却特,彈出選擇對話框,選擇相冊或者拍照筛圆,完成后湖出現(xiàn)剪裁界面裂明,裁剪完成后,會將頭像顯示在界面上太援,如果有服務(wù)的話闽晦,會將頭像上傳到服務(wù)器。
- 登錄過程
在很多應(yīng)用程序的模塊中提岔,都有“我的”這個模塊仙蛉,在未登錄狀態(tài)下點(diǎn)擊其中的某一項(xiàng),就會彈出登錄界面碱蒙,登錄完成后回到我的界面荠瘪,會顯示一些登錄后的數(shù)據(jù)
startActivityForResult(intent, requestcode),該方法兩個參數(shù)一個是帶數(shù)據(jù)的Intent,另一個就是請求碼赛惩,這個請求碼是用于給activity識別是哪個activity返回的數(shù)據(jù)哀墓,因?yàn)樵谝粋€activity中可能會出現(xiàn)多個startActivityForResult.
onActivityResult(int requestCode, int resultCode, Intent data)該方法在startActivityForResult啟動的activity結(jié)束后返回數(shù)據(jù)時調(diào)用,其中第二個參數(shù)是結(jié)果碼喷兼,結(jié)果碼為RESULT_OK時麸祷,說明activity順利結(jié)束并返回結(jié)果。
第一個參數(shù)requestcode就是被啟動的activity的識別碼褒搔,在startActivityForResult方法時傳入。
第三個參數(shù)data是Intent型的數(shù)據(jù)喷面,該數(shù)據(jù)就是從activity返回回來的數(shù)據(jù)星瘾,可以使用data.getExtras()方法得到bundle,然后從bundle中取出一些基本數(shù)據(jù)。
activity要能成功返回數(shù)據(jù)惧辈,就必須在結(jié)束finish()之前調(diào)用setResult()方法琳状,該方法的兩個參數(shù),第一個為結(jié)果碼盒齿,也就是onActivityResult方法中的第二個參數(shù)resultcode,一般情況下我們都設(shè)置該值為RESULT_OK念逞。
在B中回傳數(shù)據(jù)時采用setResult方法困食,并且之后要調(diào)用finish方法。
setResult(RESULT_OK, intent); //intent為A傳來的帶有Bundle的intent翎承,當(dāng)然也可以自己定義新的
Bundlefinish();//此處一定要調(diào)用finish()方法
按BACK鍵從一個Activity退出來的硕盹,一按BACK,android就會自動調(diào)用Activity的finish()方法叨咖,然后設(shè)置resultCode為RESULT_CANCELED瘩例,也就不會返回任何數(shù)據(jù)了 .解決方法就是在Activity里面捕獲按BACK的事件,捕獲到之后先setResult甸各,然后自己來調(diào)用finish,就搞定了……把BACK事件直接自己給吞了
@Override
public void onBackPressed() {
Log.i(TAG, "onBackPressed");
setResult(Const.LIVE_OK);
super.onBackPressed();
}
直接使用應(yīng)用程序提供的Android攝像頭API
startActivityForResult和setResult詳解
Android基礎(chǔ)之——startActivityForResult啟動界面并返回數(shù)據(jù)垛贤,上傳頭像
http://blog.csdn.net/csr_yang/article/details/31034291?utm_source=tuicool&utm_medium=referral