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

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

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

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

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

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

 

 

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

  


  1. import java.io.ByteArrayOutputStream; 
  2. import java.io.File; 
  3. import android.app.Activity; 
  4. import android.content.Intent; 
  5. import android.graphics.Bitmap; 
  6. import android.net.Uri; 
  7. import android.os.Bundle; 
  8. import android.os.Environment; 
  9. import android.provider.MediaStore; 
  10. import android.view.View; 
  11. import android.view.View.OnClickListener; 
  12. import android.widget.Button; 
  13. import android.widget.Toast; 
  14.  
  15. /**   
  16. * @Title: CameraTestActivity.java 
  17. * @Package com.lvguo.www 
  18. * @Description: 相机测试 
  19. * @author MZH 
  20. * @version V2.2   老样子,写个自己喜欢的版本号,方便日后维护 
  21. */ 
  22. public class CameraTestActivity extends Activity { 
  23.      
  24.     private Button btn ; 
  25.     private static final String IMAGE_UNSPECIFIED = "image/*"
  26.     String kkk = null
  27.      
  28.     /** Called when the activity is first created. */ 
  29.     @Override 
  30.     public void onCreate(Bundle savedInstanceState) { 
  31.         super.onCreate(savedInstanceState); 
  32.         setContentView(R.layout.main); 
  33.         btn = (Button)findViewById(R.id.button1); 
  34.         btn.setOnClickListener(new OnClickListener() { 
  35.              
  36.             @Override 
  37.             public void onClick(View v) { 
  38.                 //第一次看见这个类,不认识,直接Android Developer里面Search    
  39.                 //小马英文不是很好,时刻在电脑上挂着词典,也希望朋友们能准备一款自己喜爱的词典 
  40.                 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
  41.                 //参数可直接在官方文档里面查到,所以朋友们练下手吧,自己查下EXTRA_OUTPUT 
  42.                 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri 
  43.                         .fromFile(new File(Environment 
  44.                                 .getExternalStorageDirectory(), 
  45.                                 "mzh.jpg")));//temp为保存照片的文件名 
  46.                  
  47.                 //此处讲几句,类似这些方法,小马建议直接在浏览器下查,因为文档查不到就说没查到, 
  48.                 //有网情况下,会自动定位到Activity | Android Developers直接点就OK了 
  49.                  
  50.                 startActivityForResult(intent, 1); //这是个好东西哦 
  51.                 Toast.makeText(getApplicationContext(), "点击拍照", Toast.LENGTH_LONG).show(); 
  52.             } 
  53.         }); 
  54.     } 
  55.      
  56.      
  57.     /** 
  58.      * 用来处理startActivityForResult返回的数据,查此方法用老办法 :直接在浏览器下查 
  59.      */ 
  60.     @Override 
  61.     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
  62.         if (requestCode == 9) {  //此处的数字自己定,可随便   
  63.             Bundle extras = data.getExtras(); 
  64.             if (extras != null) { 
  65.                 Bitmap photo = extras.getParcelable("data"); 
  66.                 ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
  67.                 //英语不好的朋友,拿工具查compress是什么意思就明白了,小马英语一般,所以此处多说一句,工具 
  68.                 photo.compress(Bitmap.CompressFormat.JPEG, 60, stream); 
  69.                 byte[] b = stream.toByteArray(); 
  70.                  
  71.                  
  72.                 //Base64Coder是一个剪切压缩辅助类,里面的东西我也看不懂,不过没事,直接用,因为要用的方法不多,情况具体定 
  73.                 kkk = new String(Base64Coder.encodeLines(b)); 
  74.             } 
  75.  
  76.         } 
  77.         if(requestCode == 1){ 
  78.             File picture = new File(Environment.getExternalStorageDirectory() 
  79.                     + "/mzh.jpg"); 
  80.             cutPic(Uri.fromFile(picture)); 
  81.         } 
  82.         super.onActivityResult(requestCode, resultCode, data); 
  83.     } 
  84.      
  85.     public void cutPic(Uri uri) { 
  86.         //下面这一句第一眼看到我不懂,没事,直接Android Developer里面Search  Intent  
  87.          
  88.         //熟悉下面Summary吗?用工具查什么意思,再找下它是什么地方的,是官方文档最右侧顶端 的东西,里面有个Ctros,点进去 
  89.         //Summary: Nested Classes | Constants | Inherited Constants | Fields  
  90.         //| Ctors | Methods | Inherited Methods | [Expand All] 
  91.         //会发现有个构造方法:Intent(String action)。。。。再点进去,贴官方代码: 
  92.         /** 
  93.          * public Intent (String action) 
  94.  
  95.         Since: API Level 1 
  96.             Create an intent with a given action. All other fields (data, type, class) are null.  
  97.             Note that the action must be in a namespace because Intents are used globally in  
  98.             the system -- for example the system VIEW action is android.intent.action.VIEW;  
  99.             an application's custom action would be something like com.google.app.myapp.CUSTOM_ACTION. 
  100.         Parameters 
  101.  
  102.             <看到这句了吧?ACTION_VIEW,不知道的可以再Search> 
  103.             action  The Intent action, such as ACTION_VIEW. 
  104.              
  105.              要再不明白的朋友可以直接在有网情况下直接把com.android.camera.action.CROP Search一下就OK了, 
  106.              小马查询文档的能力不强,所以在查询这块多说几句 
  107.  
  108.          */ 
  109.         Intent intent = new Intent("com.android.camera.action.CROP"); 
  110.         intent.setDataAndType(uri, IMAGE_UNSPECIFIED); 
  111.         intent.putExtra("crop""true"); 
  112.         // aspectX aspectY 是宽高的比例 
  113.         intent.putExtra("aspectX"1); 
  114.         intent.putExtra("aspectY"1); 
  115.         // outputX outputY 是裁剪图片宽高 
  116.         intent.putExtra("outputX"150); 
  117.         intent.putExtra("outputY"150); 
  118.         intent.putExtra("return-data"true); 
  119.         startActivityForResult(intent, 9); 
  120.     } 
  121.      

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

   


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

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