在实现拍照的功能时遇到了很多问题,搜索了很多资料,尝试了很多办法,终于解决了,下面简要的描述下在开发过程中遇到的问题。
虽然之前看过android开发的书,但是没有做过东西,这次也是临时决定让我做一个android采集系统的演示程序。拍照是其中一个功能,让网搜索了下拍照有两种方式,其中一种就是调用系统相机实现拍照功能。
启动照相机进行拍照,代码如下:
-
btnCamera.setOnClickListener(newButton.OnClickListener()
-
{
-
-
publicvoidonClick(Viewv)
-
{
-
Intenti=newIntent("android.media.action.IMAGE_CAPTURE");
-
startActivityForResult(i,Activity.DEFAULT_KEYS_DIALER);
-
}
-
});
获取拍照后图片数据,代码如下:
-
@Override
-
protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata)
-
{
-
switch(resultCode)
-
{
-
caseRESULT_OK:
-
super.onActivityResult(requestCode,resultCode,data);
-
if(data!=null){
-
Bundleextras=data.getExtras();
-
Bitmapbmp=(Bitmap)extras.get("data");
-
-
ivstorepic.setImageBitmap(bmp);
-
hasShootPic=true;
-
}
-
else
-
{
-
hasShootPic=false;
-
}
-
break;
-
default:
-
break;
-
}
-
-
}
此时,遇到第一个问题,使用miui系统手机拍照时,无法获取到照片数据,使用Log打印数据之后发现Bitmap bmp = (Bitmap) extras.get("data"); 处出现异常。然后搜索了很多资料,问了很多人,都说这个代码没有问题。但是问题还是要解决,后来想是不是可以把数据存放在SDcard上,然后读取SDcard上数据显示在图形空间上。测试之后发现这样可以实现。其中涉及到的变量定义如下:
-
publicstaticfinalStringSDCARD_ROOT_PATH=android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
-
publicstaticfinalStringSAVE_PATH_IN_SDCARD="/bi.data/";
-
publicstaticfinalStringIMAGE_CAPTURE_NAME="cameraTmp.png";
-
publicfinalstaticintREQUEST_CODE_TAKE_PICTURE=12;
启动相机进行拍照,代码如下:
-
btnCamera.setOnClickListener(newButton.OnClickListener(){
-
publicvoidonClick(Viewv){
-
-
Intentintent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);
-
-
if(SimpleFileTool.isHasSdcard()){
-
intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(newFile(SDCARD_ROOT_PATH+
-
SAVE_PATH_IN_SDCARD,IMAGE_CAPTURE_NAME)));
-
}
-
startActivityForResult(intent,REQUEST_CODE_TAKE_PICTURE);
-
}
-
});
获取拍照后图片数据,代码如下:
-
@Override
-
protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
-
if(resultCode==RESULT_OK){
-
if(requestCode==REQUEST_CODE_TAKE_PICTURE){
-
-
if(isHasSdcard()){
-
getImage(SDCARD_ROOT_PATH+SAVE_PATH_IN_SDCARD+IMAGE_CAPTURE_NAME);
-
}
-
else{
-
-
Bundleextras=data.getExtras();
-
bitmap=(Bitmap)extras.get("data");
-
img.setImageBitmap(bitmap);
-
img.setVisibility(View.VISIBLE);
-
hasShootPic=false;
-
}
-
}
-
}
-
super.onActivityResult(requestCode,resultCode,data);
-
-
-
-
-
publicstaticbooleanisHasSdcard()
-
{
-
Stringstatus=Environment.getExternalStorageState();
-
if(status.equals(Environment.MEDIA_MOUNTED)){
-
returntrue;
-
}else{
-
returnfalse;
-
}
-
}
-
-
-
-
Bitmapbitmap;
-
intmaxH=200;
-
privatevoidgetImage(StringimagePath){
-
BitmapFactory.Optionsoptions=newBitmapFactory.Options();
-
options.inJustDecodeBounds=true;
-
-
bitmap=BitmapFactory.decodeFile(imagePath,options);
-
-
intbe=(int)(options.outHeight/(float)maxH);
-
intys=options.outHeight%maxH;
-
floatfe=ys/(float)maxH;
-
if(fe>=0.5)be=be+1;
-
if(be<=0)
-
be=1;
-
options.inSampleSize=be;
-
-
-
options.inJustDecodeBounds=false;
-
bitmap=BitmapFactory.decodeFile(imagePath,options);
-
img.setImageBitmap(bitmap);
-
img.setVisibility(View.VISIBLE);
-
}
以上代码,实现功能实际上是直接把图片存储在SDcard内,然后读取数据现实,后面之所以加上一个直接获取数据返回的代码,是为了兼容一些手机。测试了几款手机后发现可正常,使用也算解决了目前遇到的问题。记录下来,备忘。
分享到:
相关推荐
应开发需要,不想调用第三方库实现功能。调用系统相机拍照,系统相册进行多选。注意多选照片时要长按一张图片变为多选。
Android 调用系统相机拍照,包括静默拍照,参考别人
Android 调用系统相机拍照、以及相册。完成之后图片是上传到app上。没有上传到服务器,因为我没服务器测试。但项目里面有个类可以参考上传图片到服务器,我就没测试了。欢迎下载。
androidの调用系统相机拍照,简单实用,方便你的开发
调用系统相机进行拍照demo,代码是自己跟着慕课网课程《Android摄像头基础》(https://www.imooc.com/u/2950649/courses)中手动敲的,如果大家不想下载可以直接去看视频讲解,很短而且讲的不错。需要注意的是在真机...
本项目是通过调用androi的手机的自带照相机拍照,并将获取的大图存放的MediaStore数据库的images表中。
Android调用系统相机拍照,默认返回为缩略图大约几十K,一些场景下返回缩略图时不行的。在这个源码里分别实现了调用系统相机后返回缩略图(几十k)和原图(1—n M不等的图片(即正常用相机拍照的图片))。
自定义webview中的网页“拍照”按钮调用系统相机拍照的API接口MyBrowserAPI.CapturePhoto(filename),在网页JavaScript中调用以后返回存放照片的完整路径名,默认将照片存放在系统SD卡的根目录,包含整个工程中需要添加...
Android 调用系统相机/相册 获取照片 在照片上添加文字水印
android studio 调用摄像头拍照或选择相册照片,拿到图片并存储图片
应开发需要,不想调用第三方库实现功能。调用系统相机拍照,系统相册进行多选。注意多选照片时要长按一张图片变为多选。
Android调用系统相机拍照、实现压缩、图片旋转、保存以及6.0以上适配问题
【TakePicture】项目分为两大部分...实测:android 8、9、10、11、13以及鸿蒙系统有效。 机型:小米、OPPO、VIVO、华为手机。 1. 上传头像并裁剪。 2. 上传多张照片并做压缩处理,图片可实现在线预览,伸缩放大等功能。
拍照或者从相册中选择图片后,我们都可以直接或间接的得到Uri或源文件。 通过`imageView.setImageUri(uri)`不会引发图片方向不正确的问题。 但是通过`BitmapFactory.decodeFile();`将源文件解析成Bitmap后再...
主要介绍了Android 实现调用系统照相机拍照和录像的功能的相关资料,需要的朋友可以参考下
调用系统相机拍照,保存图片,并可显示大图和小图
这是github的项目源码地址。Android Studio2.3.3调用系统的Camera实现拍照功能,并将照片保存到本地内存卡中
在我们Android开发中经常需要做这个一个功能,调用系统相机拍照,然后获取拍摄的照片。下面是我总结的两种方法获取拍摄之后的照片,一种是通过Bundle来获取压缩过的照片,一种是通过SD卡获取的原图。 下面是演示代码...
运行APP后出来的是一篇文章,点击文章即完成拍照(默认后置),然后需要使用ES之类的文件浏览器打开(在手机相册中是找不到的);代码只用于学习用途;
通过代码,调用系统的硬件摄像头照相.并显示预览