今天小马来讲下在使用相机功能时如果正确的使用相机,因为小马当前用的时候在

上找了例子,但后来发现有很多相机导入之后就不能用了,我很郁闷的,再后来就

听到群里有人讲到相机什么MediaStore啊什么的,这个类没听过,所以查了下,此

再多说点东西,大家查东西的时候不用把类所属的哪个包都记得清清楚楚的,还得

在API找半天,如果遇到什么没见过的类,可以直接在Android Developer里面使用

search这个查询框,不明白什么就写什么进去:

现在,直接开始代码,最后小马会把我做的DEMO贴出来,供大家学习:

        
  1. importjava.io.ByteArrayOutputStream;
  2. importjava.io.File;
  3. importandroid.app.Activity;
  4. importandroid.content.Intent;
  5. importandroid.graphics.Bitmap;
  6. importandroid.net.Uri;
  7. importandroid.os.Bundle;
  8. importandroid.os.Environment;
  9. importandroid.provider.MediaStore;
  10. importandroid.view.View;
  11. importandroid.view.View.OnClickListener;
  12. importandroid.widget.Button;
  13. importandroid.widget.Toast;
  14. /**
  15. *@Title:CameraTestActivity.java
  16. *@Packagecom.lvguo.www
  17. *@Description:相机测试
  18. *@authorMZH
  19. *@versionV2.2老样子,写个自己喜欢的版本号,方便日后维护
  20. */
  21. publicclassCameraTestActivityextendsActivity{
  22. privateButtonbtn;
  23. privatestaticfinalStringIMAGE_UNSPECIFIED="image/*";
  24. Stringkkk=null;
  25. /**Calledwhentheactivityisfirstcreated.*/
  26. @Override
  27. publicvoidonCreate(BundlesavedInstanceState){
  28. super.onCreate(savedInstanceState);
  29. setContentView(R.layout.main);
  30. btn=(Button)findViewById(R.id.button1);
  31. btn.setOnClickListener(newOnClickListener(){
  32. @Override
  33. publicvoidonClick(Viewv){
  34. //第一次看见这个类,不认识,直接AndroidDeveloper里面Search
  35. //小马英文不是很好,时刻在电脑上挂着词典,也希望朋友们能准备一款自己喜爱的词典
  36. Intentintent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);
  37. //参数可直接在官方文档里面查到,所以朋友们练下手吧,自己查下EXTRA_OUTPUT
  38. intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri
  39. .fromFile(newFile(Environment
  40. .getExternalStorageDirectory(),
  41. "mzh.jpg")));//temp为保存照片的文件名
  42. //此处讲几句,类似这些方法,小马建议直接在浏览器下查,因为文档查不到就说没查到,
  43. //有网情况下,会自动定位到Activity|AndroidDevelopers直接点就OK了
  44. startActivityForResult(intent,1);//这是个好东西哦
  45. Toast.makeText(getApplicationContext(),"点击拍照",Toast.LENGTH_LONG).show();
  46. }
  47. });
  48. }
  49. /**
  50. *用来处理startActivityForResult返回的数据,查此方法用老办法:直接在浏览器下查
  51. */
  52. @Override
  53. protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
  54. if(requestCode==9){//此处的数字自己定,可随便
  55. Bundleextras=data.getExtras();
  56. if(extras!=null){
  57. Bitmapphoto=extras.getParcelable("data");
  58. ByteArrayOutputStreamstream=newByteArrayOutputStream();
  59. //英语不好的朋友,拿工具查compress是什么意思就明白了,小马英语一般,所以此处多说一句,工具
  60. photo.compress(Bitmap.CompressFormat.JPEG,60,stream);
  61. byte[]b=stream.toByteArray();
  62. //Base64Coder是一个剪切压缩辅助类,里面的东西我也看不懂,不过没事,直接用,因为要用的方法不多,情况具体定
  63. kkk=newString(Base64Coder.encodeLines(b));
  64. }
  65. }
  66. if(requestCode==1){
  67. Filepicture=newFile(Environment.getExternalStorageDirectory()
  68. +"/mzh.jpg");
  69. cutPic(Uri.fromFile(picture));
  70. }
  71. super.onActivityResult(requestCode,resultCode,data);
  72. }
  73. publicvoidcutPic(Uriuri){
  74. //下面这一句第一眼看到我不懂,没事,直接AndroidDeveloper里面SearchIntent
  75. //熟悉下面Summary吗?用工具查什么意思,再找下它是什么地方的,是官方文档最右侧顶端的东西,里面有个Ctros,点进去
  76. //Summary:NestedClasses|Constants|InheritedConstants|Fields
  77. //|Ctors|Methods|InheritedMethods|[ExpandAll]
  78. //会发现有个构造方法:Intent(Stringaction)。。。。再点进去,贴官方代码:
  79. /**
  80. *publicIntent(Stringaction)
  81. Since:APILevel1
  82. Createanintentwithagivenaction.Allotherfields(data,type,class)arenull.
  83. NotethattheactionmustbeinanamespacebecauseIntentsareusedgloballyin
  84. thesystem--forexamplethesystemVIEWactionisandroid.intent.action.VIEW;
  85. anapplication'scustomactionwouldbesomethinglikecom.google.app.myapp.CUSTOM_ACTION.
  86. Parameters
  87. <看到这句了吧?ACTION_VIEW,不知道的可以再Search>
  88. actionTheIntentaction,suchasACTION_VIEW.
  89. 要再不明白的朋友可以直接在有网情况下直接把com.android.camera.action.CROPSearch一下就OK了,
  90. 小马查询文档的能力不强,所以在查询这块多说几句
  91. */
  92. Intentintent=newIntent("com.android.camera.action.CROP");
  93. intent.setDataAndType(uri,IMAGE_UNSPECIFIED);
  94. intent.putExtra("crop","true");
  95. //aspectXaspectY是宽高的比例
  96. intent.putExtra("aspectX",1);
  97. intent.putExtra("aspectY",1);
  98. //outputXoutputY是裁剪图片宽高
  99. intent.putExtra("outputX",150);
  100. intent.putExtra("outputY",150);
  101. intent.putExtra("return-data",true);
  102. startActivityForResult(intent,9);
  103. }
  104. }

好了,到目前为止,代码已经贴完了,但有重要的一点,要在刚开始做东西时就应该想清楚自己需要什么东西,有没权限啊SD卡空间啊什么问题的,所以,没权限的不行,报错,所以加上以下权限即可:

        
  1. <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  2. <uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
  3. <!--相机使用权限-->
  4. <uses-permissionandroid:name="android.permission.CAMERA"/>
  5. <uses-featureandroid:name="android.hardware.camera"/>
  6. <uses-featureandroid:name="android.hardware.camera.autofocus"/>

这些权限网上都有,搜下拍照要什么权限就可以了,如果你觉得没太懂的话,就自己在小马上传的附件里面打断点跟下就知道是怎么走的咯,很简单的DEMO,但在网上找的相机都会有错,所以自己试了下,可以了就贴出来,朋友们有好的方法可以指点小马一下,三人行,必有我师,小马知错就改,吼吼,学习愉快!

更多相关文章

  1. 东拼西凑写的android 相机例子,包含一些遇到的坑
  2. Android仿微信文章悬浮窗效果的实现代码
  3. Android(安卓)5.0 权限管理导致的apk安装失败解决方案
  4. 用DownLoadManage封装一个App的更新组件(兼容android 6、7、8)
  5. android 蓝牙搜索不到Ble设备
  6. Unity 3D 读取android 本地相册打开相机
  7. Android之Android(安卓)6.0权限机制及开发流程详解
  8. Android6.0(Android(安卓)M) 悬浮窗被禁用,无权限开启悬浮窗的解决
  9. Android开发 之 Camera2之拍照

随机推荐

  1. Android(安卓)UI性能优化详解
  2. android studio2.3以后给apk签名打包后安
  3. Java性能调优
  4. 基于Gradle支持Android(安卓)Studio的蒲
  5. Android资源管理框架(Asset Manager)简要介
  6. Android清除数据、清除缓存、一键清理的
  7. Android(安卓)性能优化 内存优化 How to
  8. Android(安卓)SQLiteException: near "":
  9. android之生命周期onSaveInstanceState()
  10. HTC HERO/Android(安卓)刷机+中文配置