安卓,弹出选项框从相册相机中选择图片并显示。动态权限的处理,附源代码。
来源:互联网 发布:怎么与isp网络签署协议 编辑:程序博客网 时间:2024/06/06 17:20
处女博客,弹出选项框从相册/相机中选择图片并显示,可以反复选择。多的不说,先上图:
1.初始界面:图片来自阿里矢量库。
2.点击相机按钮:出现选项框
3.先从图库选吧
4.再次点击,又弹选项框
5.测试拍照
6.测试多次选择:
效果就是这样,可以根据自己需求不同挖该代码:
新手,代码写得很烂;
上传部分代码吧:
dialog选项框。
@Overridepublic void onClick(View v) { switch (v.getId()) { case R.id.Tv_pic1: AlertDialog.Builder builder1 = new AlertDialog.Builder(MainActivity.this); // 设置参数 builder1.setTitle("选择") .setMessage("选择你要打开的应用") .setPositiveButton("相机", new DialogInterface.OnClickListener() { @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2) @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); //动态权限判断申请 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { int checkCallPhonePermission = ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA); if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, CAMERA_PERMISSION_REQUEST_CODE); return; } else { Intent intent0 = new Intent(); intent0.setAction(MediaStore.ACTION_IMAGE_CAPTURE); imageFileUri = getOutFileUri(TYPE_FILE_IMAGE); intent0.putExtra(MediaStore.EXTRA_OUTPUT, imageFileUri); if (intent0.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent0, SYSTEM_CAMERA_REQUESTCODE); } } } else { Intent intent0 = new Intent(); intent0.setAction(MediaStore.ACTION_IMAGE_CAPTURE); imageFileUri = getOutFileUri(TYPE_FILE_IMAGE); intent0.putExtra(MediaStore.EXTRA_OUTPUT, imageFileUri); if (intent0.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent0, SYSTEM_CAMERA_REQUESTCODE); } } } }) .setNegativeButton("相册", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); imageFileUri = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI; Intent intent0 = new Intent(Intent.ACTION_PICK, imageFileUri); startActivityForResult(intent0, SYSTEM_ALBUM_REQUESTCODE); } }); builder1.create().show(); break; case R.id.Img_show: AlertDialog.Builder builder2 = new AlertDialog.Builder(MainActivity.this); // 设置参数 builder2.setTitle("选择") .setMessage("选择你要打开的应用") .setPositiveButton("相机", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { int checkCallPhonePermission = ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA); if (checkCallPhonePermission != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, CAMERA_PERMISSION_REQUEST_CODE); return; } else { Intent intent0 = new Intent(); intent0.setAction(MediaStore.ACTION_IMAGE_CAPTURE); imageFileUri = getOutFileUri(TYPE_FILE_IMAGE); intent0.putExtra(MediaStore.EXTRA_OUTPUT, imageFileUri); if (intent0.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent0, SYSTEM_CAMERA_REQUESTCODE); } } } else { Intent intent0 = new Intent(); intent0.setAction(MediaStore.ACTION_IMAGE_CAPTURE); imageFileUri = getOutFileUri(TYPE_FILE_IMAGE); intent0.putExtra(MediaStore.EXTRA_OUTPUT, imageFileUri); if (intent0.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent0, SYSTEM_CAMERA_REQUESTCODE); } } } }) .setNegativeButton("相册", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); imageFileUri = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI; Intent intent0 = new Intent(Intent.ACTION_PICK, imageFileUri); startActivityForResult(intent0, SYSTEM_ALBUM_REQUESTCODE); } }); builder2.create().show(); break; }}
ActivityForResult处理:
protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case SYSTEM_ALBUM_REQUESTCODE: afterPhoto.setVisibility(View.VISIBLE); beforPhoto.setVisibility(View.INVISIBLE); picshow.setVisibility(View.VISIBLE); //获取图库得到数据并显示 Uri selectedImage = data.getData(); String[] filePathColumns = {MediaStore.Images.Media.DATA}; Cursor c = getContentResolver().query(selectedImage, filePathColumns, null, null, null); c.moveToFirst(); int columnIndex = c.getColumnIndex(filePathColumns[0]); String imagePath = c.getString(columnIndex); verifyStoragePermissions(MainActivity.this); setPicToImageView(picshow,imagePath); c.close(); break; case SYSTEM_CAMERA_REQUESTCODE: afterPhoto.setVisibility(View.VISIBLE); beforPhoto.setVisibility(View.INVISIBLE); picshow.setVisibility(View.VISIBLE); String picpath = savePhoto(imageFileUri.getEncodedPath()); setPicToImageView(picshow, picpath); default: break; }}
xml就没什么啦;一个样式,不过去掉安卓原生的标题栏入坑了。是<item name="windowNoTitle">true</item>一直写的
<item name="android:windowNoTitle">true</item>xml代码:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.huqi.takephoto.MainActivity"> <TextView android:id="@+id/title_info" android:layout_width="match_parent" android:layout_height="40dp" android:text="图片选择" android:gravity="center" android:textColor="@android:color/black" android:background="#F8F8FF" android:textSize="18sp" /> <RelativeLayout android:layout_below="@+id/title_info" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="80dp" android:paddingBottom="5dp" > <TextView android:id="@+id/Tv_pic1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="60dp" android:drawableTop="@drawable/photo" android:text=" 选择图片" android:gravity="center" android:textSize="15sp" android:layout_centerHorizontal="true" android:layout_alignBottom="@+id/Img_show"/> <ImageView android:id="@+id/Img_show" android:layout_width="150dp" android:layout_height="150dp" android:layout_gravity="center" android:visibility="invisible" android:layout_centerHorizontal="true"/> <TextView android:id="@+id/Tv_pic2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" 图片展示 " android:visibility="invisible" android:layout_marginLeft="30dp" android:textSize="15sp" android:layout_alignLeft="@+id/Img_show" android:layout_marginTop="10dp" android:layout_below="@+id/Img_show"/> </RelativeLayout></RelativeLayout>另外还有读写权限:<!-- 用于读取手机当前的状态 --><uses-permission android:name="android.permission.READ_PHONE_STATE"/><!-- 写入扩展存储,向扩展卡写入数据,用于写入tup--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.CAMERA"/>安卓6.0动态权限也在代码里处理了:
// 检测相机是否存在@SuppressWarnings("unused")private boolean checkCameraHardWare(Context context) { PackageManager packageManager = context.getPackageManager(); return packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA);}private void verifyStoragePermissions(Context context) { int permissionWrite = ActivityCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE); if(permissionWrite != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(MainActivity.this, PERMISSION_EXTERNAL_STORAGE, WRITE_SDCARD_PERMISSION_REQUEST_CODE); }}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { // 打开相册选取: case WRITE_SDCARD_PERMISSION_REQUEST_CODE: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { } else { Toast.makeText(this, "读写内存卡内容权限被拒绝", Toast.LENGTH_SHORT).show(); } break; case 222: if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { // Permission Granted } else { // Permission Denied Toast.makeText(MainActivity.this, "很遗憾你把相机权限禁用了。请务必开启相机权限享受我们提供的服务吧。", Toast.LENGTH_SHORT) .show(); } break; }}
有了picpath后面做上传也很容易,我是用原生http,整理后下次博客再放。为了方便上传压缩图片,定义了bimp类,多次压缩的代码网上也有,
最近实习,有很多自己写的小demo。很多也是借鉴前人的。很喜欢这种分享的精神,空余时间我也会来写点小博客,照顾下新人。
待会加上githup的链接。
阅读全文
1 0
- 安卓,弹出选项框从相册相机中选择图片并显示。动态权限的处理,附源代码。
- 安卓开发,从相册或者相机中选择一张图片并裁剪,上传和下载。
- 安卓相册,相机图片选择
- Android从相机、相册选择图片并裁剪
- Android选择图片(从相册或相机)并裁剪
- 安卓选择相册或者相机图片并裁剪适配华为小米机型
- Android调用系统相册和相机选择图片并显示在imageview中
- 从相机or相册获取图片并显示
- 在安卓开发中调用手机相册,相机,选择相片裁剪并上传
- 安卓基础--实现从系统相机,相册获取图片
- 关于6.0手机的从相册或相机选择图片
- 关于选择图片从相机或相册的记录
- iOS从相册 相机选择图片
- 从相册(文档)或相机选择图片
- 从相册或相机选择图片
- 从相机或者相册选择图片
- Unity中读取安卓相册选择图片的方法
- 安卓调用手机的相册与相机获取图片并适配到控件
- SLF4J源码解析-LoggerFactory(一)
- 如何将服务器中的图片显示出来并实现删除。
- 2017 校招真题(数组)
- 不用Linux也可以的强大文本处理方法
- opencv二维码识别解码
- 安卓,弹出选项框从相册相机中选择图片并显示。动态权限的处理,附源代码。
- 简单的golang Web服务
- STM32F407外扩SRAM配置
- extjs里面 Ext.Window ,的window放一个URL从新跳转一个页面
- 子序列个数 (DP)
- 欢迎使用CSDN-markdown编辑器
- java,结构模式,GoF设计模式
- ROS---用catkin创建ROS包、编译
- Linux内核设计与实现 进程管理