zoukankan      html  css  js  c++  java
  • android camera Intent调用

    /*用来标识请求照相功能的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");  

      注意此处 写的是sd卡路径需加       <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 权限

    如果此处写成程序路径 拍照以后 不会调用onActivityResult  原因外边程序无法访问本程序

        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;  
        }  
  • 相关阅读:
    141. Linked List Cycle
    2. Add Two Numbers
    234. Palindrome Linked List
    817. Linked List Components
    《算法图解》之快速排序
    C++-对象指针的滥用
    C++学习书籍评价
    C++-随机数的产生
    Java-重载和重写区别剖析
    Qt- 图形界面应用程序的运行模式
  • 原文地址:https://www.cnblogs.com/pandans/p/2062455.html
Copyright © 2011-2022 走看看