iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Android如何实现拍照或者选取本地图片
  • 414
分享到

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

2023-06-29 17:06:52 414人浏览 泡泡鱼
摘要

这篇文章主要介绍Android如何实现拍照或者选取本地图片,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下总体流程从selectPhotoActivity中启动图册或者相机,再根据获取的uri进行

这篇文章主要介绍Android如何实现拍照或者选取本地图片,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

具体内容如下

总体流程

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());    }}

以上是“Android如何实现拍照或者选取本地图片”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

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

本文链接: https://www.lsjlt.com/news/325911.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
  • 微信小程序中如何实现拍照或从相册选取图片上传
    这篇文章主要介绍了微信小程序中如何实现拍照或从相册选取图片上传,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。upload.wxml<!...
    99+
    2024-04-02
  • 微信小程序开发中如何实现从本地相册选择图片或使用相机拍照
    这篇文章主要为大家展示了微信小程序开发中如何实现从本地相册选择图片或使用相机拍照,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“微信小程序开发中如何实现从本地相册选择图片或使用相机拍照”这篇文章吧。...
    99+
    2023-06-26
  • 微信小程序如何实现拍照和相册选取图片
    这篇文章将为大家详细讲解有关微信小程序如何实现拍照和相册选取图片,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下布局:<!--pages/camera/camera.wxml-->&...
    99+
    2023-06-15
  • 小程序怎么从本地选择图片或使用相机拍照功能
    这篇“小程序怎么从本地选择图片或使用相机拍照功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“小程序怎么从本地选择图片或使用...
    99+
    2023-06-26
  • 微信小程序实现拍照和相册选取图片
    本文实例为大家分享了微信小程序实现拍照和相册选取图片的具体代码,供大家参考,具体内容如下 布局: <!--pages/camera/camera.wxml--> &l...
    99+
    2024-04-02
  • 微信小程序中怎么实现拍照或从相册选取图片上传
    这篇文章主要讲解了“微信小程序中怎么实现拍照或从相册选取图片上传”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序中怎么实现拍照或从相册选取图片上传”吧!发现问题老大要让我实现下载xl...
    99+
    2023-06-30
  • 怎么在android中实现拍从相册中选取图片
    这篇文章将为大家详细讲解有关怎么在android中实现拍从相册中选取图片,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。获取图片方式: (类似更换头像的效果)手机拍照 选择图片;2、相册选取图...
    99+
    2023-06-14
  • 如何适配AndroidQ拍照和读取相册图片?
    不懂如何适配AndroidQ拍照和读取相册图片??其实想解决这个问题也不难,下面让小编带着大家一起学习怎么去解决,希望大家阅读完这篇文章后大所收获。Google发行Android Q版本也有很长一段时间了,华为应用市场已经要求要适配Andr...
    99+
    2023-05-30
  • HTML5中如何使用Plus实现手机APP拍照或相册选择图片上传功能
    这篇文章给大家分享的是有关HTML5中如何使用Plus实现手机APP拍照或相册选择图片上传功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。利用HTML Plus的Camera、GalleryIO、Storage...
    99+
    2023-06-09
  • Android实现QQ图片说说照片选择效果
    本文实例为大家分享了Android实现QQ图片说说照片选择的具体代码,供大家参考,具体内容如下效果展示布局文件布局是很简单的,一个GridView,直接上布局:layout/activity_add_photo.xml<?xm...
    99+
    2023-05-30
    android 照片选择
  • 详解Android Flutter如何使用相机实现拍摄照片
    目录简介使用相机前的准备工作在flutter中使用camera总结简介 在app中使用相机肯定是再平常不过的一项事情了,相机肯定涉及到了底层原生代码的调用,那么在flutter中如何...
    99+
    2023-05-14
    Android Flutter相机拍摄照片 Flutter相机拍摄照片 Android Flutter 相机
  • Android如何实现控制摄像头拍照
    这篇文章主要介绍Android如何实现控制摄像头拍照,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用Camera控制手机拍照的步骤如下: 1) 调用Camera的open()方法打开相机。该方法默认打开后...
    99+
    2023-06-29
  • Android读取本地照片和视频相册实例代码
    前言项目中经常要选择本地照片或者视频的需求,如果去扫描整个SD卡就太耗时间,其实Android系统在启动时就已经把整个设备中的多媒体文件信息(文件名,类型,大小等)都存到了数据库,然后提供了ContentPrivider这个API来管理这个...
    99+
    2023-05-31
    android 相册 roi
  • 【Flutter】Flutter 图片选择器入门:如何使用 image_picker 插件从图库选择图片、拍摄新照片
    文章目录 一、 前言二、 Flutter 和 image_picker 插件简介三、 安装和配置 image_picker 插件四、 使用 image_picker 从图库选择图片五、 使用 ...
    99+
    2023-09-16
    flutter android ios 原力计划
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作