博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
安卓开发之调用摄像头、相册
阅读量:5055 次
发布时间:2019-06-12

本文共 2424 字,大约阅读时间需要 8 分钟。

这里抄的《第一行代码》源码,但是《第一行代码》在获取相册相片并裁剪时会出现问题

调用摄像头拍照,新建照片输出文件,创建Intent将拍照后的输出定向到该文件。

File outputImage = new File(Environment.getExternalStorageDirectory(), "tempImage.jpg");

imageUri = Uri.fromFile(outputImage);

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, TAKE_PHOTO);  //拍照后会返回结果到onActivityResult()方法 这里采用的是隐式intent,系统会自动查找能够执行操作的程序。

裁剪相片,

Intent intent = new Intent("com.android.camera.action.CROP");

intent.setDataAndType(imageUri, "image/*");
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, CROP_PHOTO);

注意添加SD卡写数据权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

调用相册相片并裁剪:

关于PICK和GET_CONTENT网上的说法是:

ACTION_PICK Android.intent.action.PICK 从列表中选择某项并返回所选数据

ACTION_GET_CONTENT Android.intent.action.GET_CONTENT 让用户选择数据,并返回所选数据(baiduzhidao)

If you want the user to choose something based on MIME type, use ACTION_GET_CONTENT.

If you have some specific collection (identified by a Uri) that you want the user to pick from, use ACTION_PICK.

In case of a tie, go with ACTION_GET_CONTENT. While ACTION_PICK is not formally deprecated, .(stackoverflow)

 

File outputImage = new File(Environment.getExternalStorageDirectory(), "output_image.jpg");

imageUri = Uri.fromFile(outputImage);

Intent intent = new Intent("android.intent.action.PICK");  //第一行代码中采用的是GET_CONTENT,在裁剪时会出现照片无法读取的问题,注意获取本地存在的资源一律用PICK
intent.setType("image/*");
intent.putExtra("crop", true);
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, TAKE_PHOTO);  //第一行代码中直接跳转到CROP_PHOTO这样没有裁剪这个过程,实际裁剪实在TAKE_PHOTO这一case中执行的。

 

case TAKE_PHOTO:

if (resultCode == RESULT_OK)
{
if(data != null)
{
imageUri = data.getData();
}
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(imageUri, "image/*");
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, CROP_PHOTO);
}
break;
case CROP_PHOTO:
if (resultCode == RESULT_OK)
{
Log.e("test", "choose");
try
{
Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
Log.e("test", "choose");
picture.setImageBitmap(bitmap);
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
}
break;

转载于:https://www.cnblogs.com/xuehe/p/5061969.html

你可能感兴趣的文章
【HTTP】Fiddler(三)- Fiddler命令行和HTTP断点调试
查看>>
Spring Boot使用Druid和监控配置
查看>>
poi 处理空单元格
查看>>
Android 内存泄漏优化总结
查看>>
luogu4849 寻找宝藏 (cdq分治+dp)
查看>>
Spring Cloud微服务笔记(五)Feign
查看>>
C语言键盘按键列表
查看>>
Codeforces Round #374 (Div. 2)
查看>>
oracle数据类型
查看>>
socket
查看>>
二叉索引树 树状数组
查看>>
日志框架--(一)基础篇
查看>>
Java设计模式之原型模式
查看>>
哲理故事与管理之道(20)-用危机激励下属
查看>>
关于源程序到可运行程序的过程
查看>>
转载:mysql数据库密码忘记找回方法
查看>>
scratch少儿编程第一季——06、人在江湖混,没有背景怎么行。
查看>>
面向对象1
查看>>
在ns2.35中添加myevalvid框架
查看>>
【贪心+DFS】D. Field expansion
查看>>