做設置頭像時有這麼一種需求,當點擊一個按鈕時,需要讓用戶選擇是拍照獲取照片,還是在圖庫中選擇獲取照片。
要滿足上述需求,有兩種解決方案,一種是創建一個選擇dialog,這個會比較保險,可以自己定義dialog的樣式,也可以很好的控制dialog裏面的內容。但是會比較麻煩一點。具體代碼如下。
/**
* 顯示修改頭像的對話框
*/
private void getPhoto() {
final String[] arrayOptions = new String[] { "拍照", "從相冊中選擇" };
AlertDialog dialog = new AlertDialog.Builder(PersonInfoActivity.this)
.setItems(arrayOptions, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
// 當選中了拍照item時
case 0:
// 拍攝照片
takePhoto();
break;
// 當選中了從相冊中選則item時
case 1:
// 從相冊中選擇照片
selectPhoto();
break;
}
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).create();
dialog.show();
}
代碼很簡單,我就不詳細說明了,真有不懂的給我留言吧。
接着就是第二種方法,這種方法快捷方便,但是不好控制外觀,和選擇的數量。
第二中方法需要用到intent的兩個函數。
Intent.createChooser()函數和chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,
new Intent[] { takePhotoIntent });函數。
具體代碼如下
public void onPickBoth(View v) {
Intent pickIntent = new Intent(Intent.ACTION_GET_CONTENT);
pickIntent.setType("image/*");
Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Intent chooserIntent = Intent.createChooser(pickIntent,
getString(R.string.activity_main_pick_both));
//將拍照intent設置爲額外初始化intent
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,
new Intent[] { takePhotoIntent });
startActivityForResult(chooserIntent, PICK_OR_TAKE_PICTURE);
}
和發起單個intent的一樣,先創建好要發起的intent,這裏面有takePhotoIntent,和pickIntent。兩個,當然你可以有三個四個五個。
然後使用createChooser方法創建一個intent。createChooser裏的第一個參數是默認要發起的Intent,第二個參數是彈出的選擇對話框的標題。
接着使用putExtra,添加額外要發起的Intent,第一個參數是固定的,第二個參數是要額外發起的intent的新的實例。
這時候再startActivityForResult(chooserIntent, PICK_OR_TAKE_PICTURE);發起這個intent的,系統就會讓你自己選擇想要啓動哪一個intent的。