/*用来标识请求照相功能的activity*/      private static final int CAMERA_WITH_DATA = 3023;         /*用来标识请求gallery的activity*/      private static final int PHOTO_PICKED_WITH_DATA = 3021;         /*拍照的照片存储位置*/      private static final File PHOTO_DIR = new File(Environment.getExternalStorageDirectory() + "/DCIM/Camera");         private File mCurrentPhotoFile;//照相机拍照得到的图片  

private void doPickPhotoAction() {               Context context = EditContact.this;                          // Wrap our context to inflate list items using correct theme               final Context dialogContext = new ContextThemeWrapper(context,                       android.R.style.Theme_Light);               String cancel="返回";               String[] choices;               choices = new String[2];               choices[0] = getString(R.string.take_photo);  //拍照               choices[1] = getString(R.string.pick_photo);  //从相册中选择               final ListAdapter adapter = new ArrayAdapter<String>(dialogContext,                       android.R.layout.simple_list_item_1, choices);                          final AlertDialog.Builder builder = new AlertDialog.Builder(                       dialogContext);               builder.setTitle(R.string.attachToContact);               builder.setSingleChoiceItems(adapter, -1,                       new DialogInterface.OnClickListener() {                           public void onClick(DialogInterface dialog, int which) {                               dialog.dismiss();                               switch (which) {                               case 0:{                                   String status=Environment.getExternalStorageState();                                   if(status.equals(Environment.MEDIA_MOUNTED)){//判断是否有SD卡                                       doTakePhoto();// 用户点击了从照相机获取                                   }                                   else{                                       showToast("没有SD卡");                                   }                                   break;                                                                  }                               case 1:                                   doPickPhotoFromGallery();// 从相册中去获取                                   break;                               }                           }                       });               builder.setNegativeButton(cancel, new DialogInterface.OnClickListener() {                              @Override                  public void onClick(DialogInterface dialog, int which) {                       dialog.dismiss();                   }                                  });               builder.create().show();           }       }              /**      * 拍照获取图片      *       */      protected void doTakePhoto() {           try {               // Launch camera to take photo for selected contact               PHOTO_DIR.mkdirs();// 创建照片的存储目录               mCurrentPhotoFile = new File(PHOTO_DIR, getPhotoFileName());// 给新照的照片文件命名               final Intent intent = getTakePickIntent(mCurrentPhotoFile);               startActivityForResult(intent, CAMERA_WITH_DATA);           } catch (ActivityNotFoundException e) {               Toast.makeText(this, R.string.photoPickerNotFoundText,                       Toast.LENGTH_LONG).show();           }       }              public static Intent getTakePickIntent(File f) {           Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE, null);           intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));           return intent;       }              /**      * 用当前时间给取得的图片命名      *       */      private String getPhotoFileName() {           Date date = new Date(System.currentTimeMillis());           SimpleDateFormat dateFormat = new SimpleDateFormat(                   "'IMG'_yyyy-MM-dd HH:mm:ss");           return dateFormat.format(date) + ".jpg";       }              // 请求Gallery程序       protected void doPickPhotoFromGallery() {           try {               // Launch picker to choose photo for selected contact               final Intent intent = getPhotoPickIntent();               startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);           } catch (ActivityNotFoundException e) {               Toast.makeText(this, R.string.photoPickerNotFoundText1,                       Toast.LENGTH_LONG).show();           }       }              // 封装请求Gallery的intent       public static Intent getPhotoPickIntent() {           Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);           intent.setType("image/*");           intent.putExtra("crop", "true");           intent.putExtra("aspectX", 1);           intent.putExtra("aspectY", 1);           intent.putExtra("outputX", 80);           intent.putExtra("outputY", 80);           intent.putExtra("return-data", true);           return intent;       }              // 因为调用了Camera和Gally所以要判断他们各自的返回情况,他们启动时是这样的startActivityForResult       protected void onActivityResult(int requestCode, int resultCode, Intent data) {           if (resultCode != RESULT_OK)               return;           switch (requestCode) {               case PHOTO_PICKED_WITH_DATA: {// 调用Gallery返回的                   final Bitmap photo = data.getParcelableExtra("data");                   // 下面就是显示照片了                   System.out.println(photo);                   //缓存用户选择的图片                   img = getBitmapByte(photo);                   mEditor.setPhotoBitmap(photo);                   System.out.println("set new photo");                   break;               }               case CAMERA_WITH_DATA: {// 照相机程序返回的,再次调用图片剪辑程序去修剪图片                   doCropPhoto(mCurrentPhotoFile);                   break;               }           }       }              protected void doCropPhoto(File f) {           try {               // 启动gallery去剪辑这个照片               final Intent intent = getCropImageIntent(Uri.fromFile(f));               startActivityForResult(intent, PHOTO_PICKED_WITH_DATA);           } catch (Exception e) {               Toast.makeText(this, R.string.photoPickerNotFoundText,                       Toast.LENGTH_LONG).show();           }       }              /**       * Constructs an intent for image cropping. 调用图片剪辑程序       */       public static Intent getCropImageIntent(Uri photoUri) {           Intent intent = new Intent("com.android.camera.action.CROP");           intent.setDataAndType(photoUri, "image/*");           intent.putExtra("crop", "true");           intent.putExtra("aspectX", 1);           intent.putExtra("aspectY", 1);           intent.putExtra("outputX", 80);           intent.putExtra("outputY", 80);           intent.putExtra("return-data", true);           return intent;       }  

更多相关文章

  1. android的图片加载和伸缩处理
  2. 如何调用android内置图片,比如menu->add的加号图片,search的放大镜
  3. Android(安卓)网络通信框架Volley简介
  4. Android(安卓)UI学习 - GridView和ImageView的使用
  5. Android(安卓)Universal Image Loader 源码分析(转载)
  6. android 相对布局,代码创建imageview,布局居中问题
  7. Android之---RecycleView实现简单的图片查看功能(类似相册查看器)
  8. Android(安卓)图片转换为 Base64 编码
  9. Android(安卓)控件之Gallery图片集

随机推荐

  1. 最火的Android开源项目(一)
  2. android progressBar 自定义 进度颜色
  3. 理解Android系统的进程间通信原理----RPC
  4. Android(安卓)UI开发之——使用Fragment
  5. 转: Android(安卓)ListView 滑动背景为黑
  6. Android中由IP地址查询经纬度坐标的实例
  7. 直接拿来用!最火的Android开源项目(一)
  8. 四十、Android(安卓)home键和back键区别
  9. [置顶] 玩转pandaboard之linaro对于Andro
  10. [转]android下面res目录