Android(安卓)相机的使用
16lz
2021-01-26
今天小马来讲下在使用相机功能时如果正确的使用相机,因为小马当前用的时候在
网上找了例子,但后来发现有很多相机导入之后就不能用了,我很郁闷的,再后来就
听到群里有人讲到相机什么MediaStore啊什么的,这个类没听过,所以查了下,此
处再多说点东西,大家查东西的时候不用把类所属的哪个包都记得清清楚楚的,还得
在API找半天,如果遇到什么没见过的类,可以直接在Android Developer里面使用
search这个查询框,不明白什么就写什么进去:
现在,直接开始代码,最后小马会把我做的DEMO贴出来,供大家学习:
- importjava.io.ByteArrayOutputStream;
- importjava.io.File;
- importandroid.app.Activity;
- importandroid.content.Intent;
- importandroid.graphics.Bitmap;
- importandroid.net.Uri;
- importandroid.os.Bundle;
- importandroid.os.Environment;
- importandroid.provider.MediaStore;
- importandroid.view.View;
- importandroid.view.View.OnClickListener;
- importandroid.widget.Button;
- importandroid.widget.Toast;
- /**
- *@Title:CameraTestActivity.java
- *@Packagecom.lvguo.www
- *@Description:相机测试
- *@authorMZH
- *@versionV2.2老样子,写个自己喜欢的版本号,方便日后维护
- */
- publicclassCameraTestActivityextendsActivity{
- privateButtonbtn;
- privatestaticfinalStringIMAGE_UNSPECIFIED="image/*";
- Stringkkk=null;
- /**Calledwhentheactivityisfirstcreated.*/
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- btn=(Button)findViewById(R.id.button1);
- btn.setOnClickListener(newOnClickListener(){
- @Override
- publicvoidonClick(Viewv){
- //第一次看见这个类,不认识,直接AndroidDeveloper里面Search
- //小马英文不是很好,时刻在电脑上挂着词典,也希望朋友们能准备一款自己喜爱的词典
- Intentintent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);
- //参数可直接在官方文档里面查到,所以朋友们练下手吧,自己查下EXTRA_OUTPUT
- intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri
- .fromFile(newFile(Environment
- .getExternalStorageDirectory(),
- "mzh.jpg")));//temp为保存照片的文件名
- //此处讲几句,类似这些方法,小马建议直接在浏览器下查,因为文档查不到就说没查到,
- //有网情况下,会自动定位到Activity|AndroidDevelopers直接点就OK了
- startActivityForResult(intent,1);//这是个好东西哦
- Toast.makeText(getApplicationContext(),"点击拍照",Toast.LENGTH_LONG).show();
- }
- });
- }
- /**
- *用来处理startActivityForResult返回的数据,查此方法用老办法:直接在浏览器下查
- */
- @Override
- protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
- if(requestCode==9){//此处的数字自己定,可随便
- Bundleextras=data.getExtras();
- if(extras!=null){
- Bitmapphoto=extras.getParcelable("data");
- ByteArrayOutputStreamstream=newByteArrayOutputStream();
- //英语不好的朋友,拿工具查compress是什么意思就明白了,小马英语一般,所以此处多说一句,工具
- photo.compress(Bitmap.CompressFormat.JPEG,60,stream);
- byte[]b=stream.toByteArray();
- //Base64Coder是一个剪切压缩辅助类,里面的东西我也看不懂,不过没事,直接用,因为要用的方法不多,情况具体定
- kkk=newString(Base64Coder.encodeLines(b));
- }
- }
- if(requestCode==1){
- Filepicture=newFile(Environment.getExternalStorageDirectory()
- +"/mzh.jpg");
- cutPic(Uri.fromFile(picture));
- }
- super.onActivityResult(requestCode,resultCode,data);
- }
- publicvoidcutPic(Uriuri){
- //下面这一句第一眼看到我不懂,没事,直接AndroidDeveloper里面SearchIntent
- //熟悉下面Summary吗?用工具查什么意思,再找下它是什么地方的,是官方文档最右侧顶端的东西,里面有个Ctros,点进去
- //Summary:NestedClasses|Constants|InheritedConstants|Fields
- //|Ctors|Methods|InheritedMethods|[ExpandAll]
- //会发现有个构造方法:Intent(Stringaction)。。。。再点进去,贴官方代码:
- /**
- *publicIntent(Stringaction)
- Since:APILevel1
- Createanintentwithagivenaction.Allotherfields(data,type,class)arenull.
- NotethattheactionmustbeinanamespacebecauseIntentsareusedgloballyin
- thesystem--forexamplethesystemVIEWactionisandroid.intent.action.VIEW;
- anapplication'scustomactionwouldbesomethinglikecom.google.app.myapp.CUSTOM_ACTION.
- Parameters
- <看到这句了吧?ACTION_VIEW,不知道的可以再Search>
- actionTheIntentaction,suchasACTION_VIEW.
- 要再不明白的朋友可以直接在有网情况下直接把com.android.camera.action.CROPSearch一下就OK了,
- 小马查询文档的能力不强,所以在查询这块多说几句
- */
- Intentintent=newIntent("com.android.camera.action.CROP");
- intent.setDataAndType(uri,IMAGE_UNSPECIFIED);
- intent.putExtra("crop","true");
- //aspectXaspectY是宽高的比例
- intent.putExtra("aspectX",1);
- intent.putExtra("aspectY",1);
- //outputXoutputY是裁剪图片宽高
- intent.putExtra("outputX",150);
- intent.putExtra("outputY",150);
- intent.putExtra("return-data",true);
- startActivityForResult(intent,9);
- }
- }
好了,到目前为止,代码已经贴完了,但有重要的一点,要在刚开始做东西时就应该想清楚自己需要什么东西,有没权限啊SD卡空间啊什么问题的,所以,没权限的不行,报错,所以加上以下权限即可:
- <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
- <uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
- <!--相机使用权限-->
- <uses-permissionandroid:name="android.permission.CAMERA"/>
- <uses-featureandroid:name="android.hardware.camera"/>
- <uses-featureandroid:name="android.hardware.camera.autofocus"/>
这些权限网上都有,搜下拍照要什么权限就可以了,如果你觉得没太懂的话,就自己在小马上传的附件里面打断点跟下就知道是怎么走的咯,很简单的DEMO,但在网上找的相机都会有错,所以自己试了下,可以了就贴出来,朋友们有好的方法可以指点小马一下,三人行,必有我师,小马知错就改,吼吼,学习愉快!
更多相关文章
- 东拼西凑写的android 相机例子,包含一些遇到的坑
- Android仿微信文章悬浮窗效果的实现代码
- Android(安卓)5.0 权限管理导致的apk安装失败解决方案
- 用DownLoadManage封装一个App的更新组件(兼容android 6、7、8)
- android 蓝牙搜索不到Ble设备
- Unity 3D 读取android 本地相册打开相机
- Android之Android(安卓)6.0权限机制及开发流程详解
- Android6.0(Android(安卓)M) 悬浮窗被禁用,无权限开启悬浮窗的解决
- Android开发 之 Camera2之拍照