private String[] items = new String[] { "選擇本地圖片", "拍照" }; /** * * 設置圖像彈出框 * */ private void ShowPickDialog() { new AlertDialog.Builder(this) .setTitle("設置頭像") .setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(); switch (which) { case 0: // 從圖片中選取頭像 dialog.dismiss(); intent = new Intent(Intent.ACTION_PICK, null); intent.setDataAndType( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); startActivityForResult(intent, IMAGE_PIC); break; case 1: // 進行拍照 dialog.dismiss(); if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { Toast.makeText(SetInfoActivity.this, "拍照功能必須插入SD卡", Toast.LENGTH_LONG).show(); return; } /** * 調用快速拍照功能,至於爲何叫快速拍照,你們能夠參考以下官方 * 文檔,you_sdk_path * /docs/guide/topics/media/camera.html * */ intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // 下面這句指定調用相機拍照後的照片存儲的路徑 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri .fromFile(new File(Environment .getExternalStorageDirectory(), fileName))); startActivityForResult(intent, IMAGE_CEAMER); break; } } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }).show(); }
2. 對startActivityForResult的返回處理:
html
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { switch (requestCode) { // 若是是直接從相冊獲取 case IMAGE_PIC: startPhotoZoom(data.getData()); break; // 若是是調用相機拍照時 case IMAGE_CEAMER: File temp = new File(Environment.getExternalStorageDirectory() + "/" + fileName); startPhotoZoom(Uri.fromFile(temp)); break; // 取得裁剪後的圖片 case IMAGE_CUT: if (data != null) { setPicToView(data); } break; default: break; } } }