iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android实现拍照或者选取本地图片
  • 140
分享到

Android实现拍照或者选取本地图片

2024-04-02 19:04:59 140人浏览 泡泡鱼
摘要

本文实例为大家分享了Android实现拍照或者选取本地图片的具体代码,供大家参考,具体内容如下 总体流程 从selectPhotoActivity中启动图册或者相机,再根

本文实例为大家分享了Android实现拍照或者选取本地图片的具体代码,供大家参考,具体内容如下

总体流程

从selectPhotoActivity中启动图册或者相机,再根据获取的uri进行裁剪,返回uri,再对这个uri执行一系列操纵。

从相册选取图片

private void pickPhoto() {
        Intent intent = new Intent(Intent.ACTioN_PICK,
                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(intent, SELECT_PIC_BY_PICK_PHOTO);
    }

使用隐式intent启动相机。

拍照获取图片

private void takePhoto() {
        // 执行拍照前,应该先判断SD卡是否存在
        String SDState = Environment.getExternalStorageState();
        if (SDState.equals(Environment.MEDIA_MOUNTED)) {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// "android.media.action.IMAGE_CAPTURE"
            File path = Environment
                    .getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
            File file = new File(path, IMAGE_FILE_NAME);
            takePhoto = Uri.fromFile(file);
            intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, takePhoto);
            startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO);
        } else {
            Toast.makeText(getApplicationContext(), "内存卡不存在",
                    Toast.LENGTH_SHORT).show();
        }
    }

值得注意的一点是,intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, takePhoto)中,设置了拍完照照片的存放路径takePhoto,在此情况下,部分机型的onActivityResult()中不会返回数据,即data.getData()为空,因为可以根据存放路径即可获取拍照图片。

裁剪图片

public void startPhotoZoom(Uri uri) {
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(uri, "image
    public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
        Cursor cursor = null;
        final String column = "_data";
        final String[] projection = { column };
        try {
            cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
            if (cursor != null && cursor.moveToFirst()) {
                final int column_index = cursor.getColumnIndexOrThrow(column);
                return cursor.getString(column_index);
            }
        } finally {
            if (cursor != null)
                cursor.close();
        }
        return null;
    }

    
    public static boolean isExternalStorageDocument(Uri uri) {
        return "com.android.externalstorage.documents".equals(uri.getAuthority());
    }

    
    public static boolean isDownloadsDocument(Uri uri) {
        return "com.android.providers.downloads.documents".equals(uri.getAuthority());
    }

    
    public static boolean isMediaDocument(Uri uri) {
        return "com.android.providers.media.documents".equals(uri.getAuthority());
    }

整体代码

public class selectPhotoActivity extends Activity implements View.OnClickListener{

    
    public static final int SELECT_PIC_BY_TACK_PHOTO = 1;
    
    public static final int SELECT_PIC_BY_PICK_PHOTO = 2;
    
    private static final int RESULT_REQUEST_CODE = 3;
    
    private Button btn_take_photo;
    
    private Button btn_pick_photo;
    
    private Button btn_cancel;
    
    private static final String IMAGE_FILE_NAME = "image.jpg";
    
    private String picPath;
    //保存裁剪后的图像
    private Bitmap photo;
    private Intent lastIntent;
    private Uri takePhoto;
    
    public static final String KEY_PHOTO_PATH = "photo_path";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_select_photo);

        btn_take_photo = (Button) findViewById(R.id.btn_take_photo);
        btn_pick_photo = (Button) findViewById(R.id.btn_pick_photo);
        btn_cancel = (Button) findViewById(R.id.btn_cancel);

        lastIntent = getIntent();

        btn_take_photo.setOnClickListener(this);
        btn_pick_photo.setOnClickListener(this);
        btn_cancel.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_take_photo : // 开启相机
                takePhoto();
                break;
            case R.id.btn_pick_photo : // 开启图册
                pickPhoto();
                break;
            case R.id.btn_cancel : // 取消操作
                this.finish();
                break;
            default :
                break;
        }
    }

    
    private void takePhoto() {
        // 执行拍照前,应该先判断SD卡是否存在
        String SDState = Environment.getExternalStorageState();
        if (SDState.equals(Environment.MEDIA_MOUNTED)) {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// "android.media.action.IMAGE_CAPTURE"
            File path = Environment
                    .getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
            File file = new File(path, IMAGE_FILE_NAME);
            takePhoto = Uri.fromFile(file);
            intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, takePhoto);
            startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO);
        } else {
            Toast.makeText(getApplicationContext(), "内存卡不存在",
                    Toast.LENGTH_SHORT).show();
        }
    }

    
    private void pickPhoto() {
        Intent intent = new Intent(Intent.ACTION_PICK,
                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(intent, SELECT_PIC_BY_PICK_PHOTO);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        finish();
        return super.onTouchEvent(event);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode != Activity.RESULT_OK) {
            Log.e("TAG","ActivityResult resultCode error");
            return;
        }

        switch (requestCode){
            case SELECT_PIC_BY_PICK_PHOTO:
                Uri uri = data.getData();
                if (!TextUtils.isEmpty(uri.getAuthority())) {
                    //查询选择图片
                    Cursor cursor = getContentResolver().query(
                        uri,
                        new String[] { MediaStore.Images.Media.DATA },
                        null,
                        null,
                        null);
                    //返回 没找到选择图片
                    if (null == cursor) {
                        return;
                    }
                    //光标移动至开头 获取图片路径
                    cursor.moveToFirst();
                    picPath = cursor.getString(cursor
                        .getColumnIndex(MediaStore.Images.Media.DATA));
                    Log.d("图片路径啊啊啊啊啊啊",picPath);
                }
                break;
            case SELECT_PIC_BY_TACK_PHOTO:
                //裁剪图片
                startPhotoZoom(takePhoto);
                break;
            case RESULT_REQUEST_CODE :
                if (data != null) {
                    Log.d("图片路径",data.getData().toString());
                    picPath = getPathByUri4kitkat(getApplicationContext(),data.getData());
                    Log.d("图片路径啊啊啊啊啊啊",picPath);
                }
                break;
        }
        if(requestCode != SELECT_PIC_BY_TACK_PHOTO) {
            lastIntent.putExtra(KEY_PHOTO_PATH, picPath);
            setResult(Activity.RESULT_OK, lastIntent);
            finish();
        }
        super.onActivityResult(requestCode, resultCode, data);

    }

    
    public void startPhotoZoom(Uri uri) {
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(uri, "image
    public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
        Cursor cursor = null;
        final String column = "_data";
        final String[] projection = { column };
        try {
            cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
            if (cursor != null && cursor.moveToFirst()) {
                final int column_index = cursor.getColumnIndexOrThrow(column);
                return cursor.getString(column_index);
            }
        } finally {
            if (cursor != null)
                cursor.close();
        }
        return null;
    }

    
    public static boolean isExternalStorageDocument(Uri uri) {
        return "com.android.externalstorage.documents".equals(uri.getAuthority());
    }

    
    public static boolean isDownloadsDocument(Uri uri) {
        return "com.android.providers.downloads.documents".equals(uri.getAuthority());
    }

    
    public static boolean isMediaDocument(Uri uri) {
        return "com.android.providers.media.documents".equals(uri.getAuthority());
    }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: Android实现拍照或者选取本地图片

本文链接: https://www.lsjlt.com/news/144278.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android实现拍照或者选取本地图片
    本文实例为大家分享了Android实现拍照或者选取本地图片的具体代码,供大家参考,具体内容如下 总体流程 从selectPhotoActivity中启动图册或者相机,再根...
    99+
    2024-04-02
  • Android如何实现拍照或者选取本地图片
    这篇文章主要介绍Android如何实现拍照或者选取本地图片,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下总体流程从selectPhotoActivity中启动图册或者相机,再根据获取的uri进行...
    99+
    2023-06-29
  • android实现拍照或从相册选取图片
    从相册或拍照更换图片功能的实现:(取图无裁剪功能) 获取图片方式: (类似更换头像的效果) 1、手机拍照 选择图片; 2、相册选取图片; 本文只是简单实现该功能,页面展示有些简陋,...
    99+
    2024-04-02
  • Android通过手机拍照或从本地相册选取图片设置头像
    像微信、QQ、微博等社交类的APP,通常都有设置头像的功能,设置头像通常有两种方式: 让用户通过选择本地相册之类的图片库中已有的图像,裁剪后作为头像。 让用户启动手机的相机拍照,拍完照片后裁剪,然后作为头像。 ...
    99+
    2023-05-31
    android 头像 本地相册
  • 微信小程序中如何实现chooseImage选择图片或者拍照
    这篇文章将为大家详细讲解有关微信小程序中如何实现chooseImage选择图片或者拍照,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。微信小程序 chooseImage选择...
    99+
    2024-04-02
  • Android如何实现拍照及图片裁剪
    这篇文章主要介绍Android如何实现拍照及图片裁剪,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!最近做项目中涉及到了图片相关功能 ,在使用安卓6.0手机及7.1手机拍照时,遇到了因权限及文件管理导致程序崩溃等问题。...
    99+
    2023-05-30
    android6.0
  • 小程序怎么从本地选择图片或使用相机拍照功能
    这篇“小程序怎么从本地选择图片或使用相机拍照功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“小程序怎么从本地选择图片或使用...
    99+
    2023-06-26
  • 微信小程序实现拍照和相册选取图片
    本文实例为大家分享了微信小程序实现拍照和相册选取图片的具体代码,供大家参考,具体内容如下 布局: <!--pages/camera/camera.wxml--> &l...
    99+
    2024-04-02
  • 微信小程序中怎么实现拍照或从相册选取图片上传
    这篇文章主要讲解了“微信小程序中怎么实现拍照或从相册选取图片上传”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序中怎么实现拍照或从相册选取图片上传”吧!发现问题老大要让我实现下载xl...
    99+
    2023-06-30
  • 微信小程序中如何实现拍照或从相册选取图片上传
    这篇文章主要介绍了微信小程序中如何实现拍照或从相册选取图片上传,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。upload.wxml<!...
    99+
    2024-04-02
  • 微信小程序开发中如何实现从本地相册选择图片或使用相机拍照
    这篇文章主要为大家展示了微信小程序开发中如何实现从本地相册选择图片或使用相机拍照,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“微信小程序开发中如何实现从本地相册选择图片或使用相机拍照”这篇文章吧。...
    99+
    2023-06-26
  • 微信小程序如何实现拍照和相册选取图片
    这篇文章将为大家详细讲解有关微信小程序如何实现拍照和相册选取图片,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下布局:<!--pages/camera/camera.wxml-->&...
    99+
    2023-06-15
  • 怎么在android中实现拍从相册中选取图片
    这篇文章将为大家详细讲解有关怎么在android中实现拍从相册中选取图片,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。获取图片方式: (类似更换头像的效果)手机拍照 选择图片;2、相册选取图...
    99+
    2023-06-14
  • Android实现调用摄像头拍照并存储照片
    目录1、前期准备2、主要方法1、需要使用Intent调用摄像头2、需要检查SD卡(外部存储)状态3、获取图片及其压缩图片3、案例展示1、Layout2、MainActivity1、前...
    99+
    2024-04-02
  • Android实现QQ图片说说照片选择效果
    本文实例为大家分享了Android实现QQ图片说说照片选择的具体代码,供大家参考,具体内容如下效果展示布局文件布局是很简单的,一个GridView,直接上布局:layout/activity_add_photo.xml<?xm...
    99+
    2023-05-30
    android 照片选择
  • 利用Python提取图片经纬度并锁定拍照地点
    目录一、原理1.图片必须具有经纬度信息2.经纬度格式转换3.根据经纬度定位二、python调用高德API进行图片定位1.main.py源码2.position_utils.py源码一...
    99+
    2024-04-02
  • Android Flutter怎么使用相机实现拍摄照片
    本篇内容介绍了“Android Flutter怎么使用相机实现拍摄照片”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用相机前的准...
    99+
    2023-07-05
  • Android读取本地照片和视频相册实例代码
    前言项目中经常要选择本地照片或者视频的需求,如果去扫描整个SD卡就太耗时间,其实Android系统在启动时就已经把整个设备中的多媒体文件信息(文件名,类型,大小等)都存到了数据库,然后提供了ContentPrivider这个API来管理这个...
    99+
    2023-05-31
    android 相册 roi
  • HTML5中如何使用Plus实现手机APP拍照或相册选择图片上传功能
    这篇文章给大家分享的是有关HTML5中如何使用Plus实现手机APP拍照或相册选择图片上传功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。利用HTML Plus的Camera、GalleryIO、Storage...
    99+
    2023-06-09
  • 详解Android Flutter如何使用相机实现拍摄照片
    目录简介使用相机前的准备工作在flutter中使用camera总结简介 在app中使用相机肯定是再平常不过的一项事情了,相机肯定涉及到了底层原生代码的调用,那么在flutter中如何...
    99+
    2023-05-14
    Android Flutter相机拍摄照片 Flutter相机拍摄照片 Android Flutter 相机
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作