`
xindrace
  • 浏览: 98390 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android调用手机拍照以及从相册选择照片

 
阅读更多
/*用来标识请求照相功能的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;   
    }  

 

分享到:
评论

相关推荐

    android studio 调用相机拍照,选择相册照片

    在Android开发中,调用相机拍照和选择相册...总结,Android Studio调用相机拍照和选择相册照片,主要涉及权限管理、启动相机Intent、处理返回结果以及图片的存储操作。对于更复杂的相机功能,可以深入研究Camera2 API。

    Android调用系统相机、相册实现拍照、图片多选Demo移动开发

    在Android应用开发中,调用...总之,Android调用系统相机和相册并不复杂,只需要理解Intent的工作原理以及如何与系统服务进行交互。遵循这些步骤,开发者可以轻松实现拍照和图片多选功能,而无需引入额外的第三方库。

    Android中照相,从相册选取照片,android拍照或从相册选择,Java源码.zip

    这个资源包“Android中照相,从相册选取照片,android拍照或从相册选择,Java源码.zip”提供了一些Java源代码,帮助开发者实现这些功能。下面将详细介绍如何在Android应用中集成拍照和从相册选择图片的流程。 1. **...

    android仿微信拍照或者从相册获取照片发送动态

    在Android应用开发中,仿照微信实现拍照或从相册选取照片并发送动态是一项常见的功能。这个过程涉及到了多个Android SDK中的关键组件和技术,包括权限管理、意图(Intent)使用、图片选择、图片处理和上传等。下面...

    Android + <调用相机拍照 & 选择相册> + 数码相机

    【TakePicture】项目分为两大部分...实测:android 8、9、10、11、13以及鸿蒙系统有效。 机型:小米、OPPO、VIVO、华为手机。 1. 上传头像并裁剪。 2. 上传多张照片并做压缩处理,图片可实现在线预览,伸缩放大等功能。

    android调用照相机拍照与选择本地照片功能

    在Android应用开发中,提供用户调用照相机拍照...以上就是关于“android调用照相机拍照与选择本地照片功能”的核心知识点,开发者在实现这些功能时,需要注意优化用户体验,合理管理文件,以及遵循Android的最佳实践。

    仿QQAndroid调用摄像头拍照和从相册中选择(上传头像)

    总结一下,仿QQAndroid调用摄像头拍照和从相册选择图片涉及的知识点包括: 1. 使用Intent启动相机应用和系统相册。 2. 在onActivityResult中处理返回的数据。 3. 图片的获取、处理和显示,包括Bitmap的操作。 4. ...

    Android中照相,从相册选取照片,android拍照或从相册选择,Java

    本文将深入探讨如何在Android应用中实现拍照、从相册选取照片以及进行文件管理的操作,主要针对Java语言编写的应用。 首先,我们要了解Android权限管理。在Android 6.0(API级别23)及以上版本,应用需要在运行时...

    android拍照或从相册选择照片并裁切关心分辨率

    在Android应用开发中,用户经常需要通过拍照或者从相册选取照片,并且有时需要对选取的照片进行裁剪,以满足特定尺寸的要求。这个过程涉及到图片处理的重要知识点,包括图像选择、图片裁剪以及关注分辨率。以下是对...

    android照相机相册选择,可以多选

    本项目标题为“android照相机相册选择,可以多选”,说明它实现了在Android平台上让用户能够通过自定义的方式,不仅能够使用相机拍摄照片,还能够从相册中选取多张图片,并且具备删除已选择图片的功能。这一特性极大...

    android 调用相机和相册

    在Android应用开发中,调用相机和相册是常见的功能,允许用户拍摄照片或选择已有的图片进行操作。本文将详细介绍两种方法,一种基于郭霖的教程,另一种是经过优化可兼容小米设备的方法。 首先,我们来看郭霖教程中...

    Android 中拍照、相册选择、裁剪照片(兼容Android7.0)

    在Android应用开发中,涉及到用户交互的一个常见任务是允许用户通过拍照或从相册选取照片,并对其进行裁剪,以满足特定尺寸或比例的需求。这里我们将深入探讨如何在Android 7.0及更高版本中实现这一功能,同时确保...

    Android zxing二维码扫描 从相册选择二维码识别

    在"Android zxing二维码扫描 从相册选择二维码识别"这个主题中,我们将深入探讨如何利用ZXing库实现在Android应用中进行二维码的扫描和识别,以及如何从相册选取图片进行识别。 首先,为了在Android应用中使用ZXing...

    delphi xe5 android 调用照相机获取拍的照片

    Delphi XE5 Android 调用照相机获取拍的照片 Delphi XE5 是一款功能强大且流行的开发环境,它提供了许多优秀的功能,包括对 Android 平台的支持。在 Android 平台上,Delphi XE5 提供了许多有用的组件和 API,允许...

    android调用相机拍照或从相册取照片(加裁剪功能)

    至此,我们就实现了在Android应用中调用相机拍照、从相册选取照片以及对图片进行裁剪的功能。`readme.txt`文件可能是对这个过程的简单说明或使用步骤,帮助开发者更好地理解代码实现。 在实际项目中,可以根据需求...

    Android-修改用户头像仿ios底部弹框从手机相册选择拍照

    本项目"Android-修改用户头像仿ios底部弹框从手机相册选择拍照"旨在实现一个与iOS类似的功能,即在Android系统上提供一个底部弹出框,让用户能够通过选择相册中的图片或者直接拍照来更新他们的头像。以下是对这个...

    兼容android7.0拍照或相册选择照片并裁剪

    android7.0拍照或相册选择照片并裁剪 如果您觉得我的代码还行,并使用我的代码,请给我的资源5星评价,这是对我最大的支持。也让更多的android开发者可以用到。 感谢郭霖,感谢...

    android Webview(H5)中调用相册和拍照

    本文将详细讲解如何在Android的Webview中调用相册和拍照功能,以实现H5与原生Android应用的深度集成。 首先,我们需要了解`WebView`的基本用法。`WebView`是Android SDK中的一个类,它可以加载URL,展示HTML页面,...

    android 拍照+从手机相册选择返回图片到imagview

    通过以上步骤,我们可以实现Android应用中从相机拍照和从相册选择图片的功能,并将选中的图片显示在`ImageView`上。这在很多应用中都是基础且常用的功能,因此理解和掌握这部分知识对于Android开发者来说至关重要。

    android 拍照,相册选择照片

    在Android平台上,为用户提供拍照和从...总的来说,Android中的拍照和相册选择照片功能涉及`Intent`的使用、相机服务的调用、相册数据的读取以及权限管理。通过这些知识点,开发者可以为用户提供完整的图片获取体验。

Global site tag (gtag.js) - Google Analytics