同時發起多個intent

做設置頭像時有這麼一種需求,當點擊一個按鈕時,需要讓用戶選擇是拍照獲取照片,還是在圖庫中選擇獲取照片。

要滿足上述需求,有兩種解決方案,一種是創建一個選擇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的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章