今天小马来讲下在使用相机功能时如果正确的使用相机,因为小马当前用的时候在
网上找了例子,但后来发现有很多相机导入之后就不能用了,我很郁闷的,再后来就
听到群里有人讲到相机什么MediaStore啊什么的,这个类没听过,所以查了下,此
处再多说点东西,大家查东西的时候不用把类所属的哪个包都记得清清楚楚的,还得
在API找半天,如果遇到什么没见过的类,可以直接在Android Developer里面使用
search这个查询框,不明白什么就写什么进去:
现在,直接开始代码,最后小马会把我做的DEMO贴出来,供大家学习:
- import java.io.ByteArrayOutputStream;
- import java.io.File;
- import android.app.Activity;
- import android.content.Intent;
- import android.graphics.Bitmap;
- import android.net.Uri;
- import android.os.Bundle;
- import android.os.Environment;
- import android.provider.MediaStore;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.Toast;
- /**
- * @Title: CameraTestActivity.java
- * @Package com.lvguo.www
- * @Description: 相机测试
- * @author MZH
- * @version V2.2 老样子,写个自己喜欢的版本号,方便日后维护
- */
- public class CameraTestActivity extends Activity {
- private Button btn ;
- private static final String IMAGE_UNSPECIFIED = "image/*";
- String kkk = null;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- btn = (Button)findViewById(R.id.button1);
- btn.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- //第一次看见这个类,不认识,直接Android Developer里面Search
- //小马英文不是很好,时刻在电脑上挂着词典,也希望朋友们能准备一款自己喜爱的词典
- Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
- //参数可直接在官方文档里面查到,所以朋友们练下手吧,自己查下EXTRA_OUTPUT
- intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri
- .fromFile(new File(Environment
- .getExternalStorageDirectory(),
- "mzh.jpg")));//temp为保存照片的文件名
- //此处讲几句,类似这些方法,小马建议直接在浏览器下查,因为文档查不到就说没查到,
- //有网情况下,会自动定位到Activity | Android Developers直接点就OK了
- startActivityForResult(intent, 1); //这是个好东西哦
- Toast.makeText(getApplicationContext(), "点击拍照", Toast.LENGTH_LONG).show();
- }
- });
- }
- /**
- * 用来处理startActivityForResult返回的数据,查此方法用老办法 :直接在浏览器下查
- */
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == 9) { //此处的数字自己定,可随便
- Bundle extras = data.getExtras();
- if (extras != null) {
- Bitmap photo = extras.getParcelable("data");
- ByteArrayOutputStream stream = new ByteArrayOutputStream();
- //英语不好的朋友,拿工具查compress是什么意思就明白了,小马英语一般,所以此处多说一句,工具
- photo.compress(Bitmap.CompressFormat.JPEG, 60, stream);
- byte[] b = stream.toByteArray();
- //Base64Coder是一个剪切压缩辅助类,里面的东西我也看不懂,不过没事,直接用,因为要用的方法不多,情况具体定
- kkk = new String(Base64Coder.encodeLines(b));
- }
- }
- if(requestCode == 1){
- File picture = new File(Environment.getExternalStorageDirectory()
- + "/mzh.jpg");
- cutPic(Uri.fromFile(picture));
- }
- super.onActivityResult(requestCode, resultCode, data);
- }
- public void cutPic(Uri uri) {
- //下面这一句第一眼看到我不懂,没事,直接Android Developer里面Search Intent
- //熟悉下面Summary吗?用工具查什么意思,再找下它是什么地方的,是官方文档最右侧顶端 的东西,里面有个Ctros,点进去
- //Summary: Nested Classes | Constants | Inherited Constants | Fields
- //| Ctors | Methods | Inherited Methods | [Expand All]
- //会发现有个构造方法:Intent(String action)。。。。再点进去,贴官方代码:
- /**
- * public Intent (String action)
- Since: API Level 1
- Create an intent with a given action. All other fields (data, type, class) are null.
- Note that the action must be in a namespace because Intents are used globally in
- the system -- for example the system VIEW action is android.intent.action.VIEW;
- an application's custom action would be something like com.google.app.myapp.CUSTOM_ACTION.
- Parameters
- <看到这句了吧?ACTION_VIEW,不知道的可以再Search>
- action The Intent action, such as ACTION_VIEW.
- 要再不明白的朋友可以直接在有网情况下直接把com.android.camera.action.CROP Search一下就OK了,
- 小马查询文档的能力不强,所以在查询这块多说几句
- */
- Intent intent = new Intent("com.android.camera.action.CROP");
- intent.setDataAndType(uri, IMAGE_UNSPECIFIED);
- intent.putExtra("crop", "true");
- // aspectX aspectY 是宽高的比例
- intent.putExtra("aspectX", 1);
- intent.putExtra("aspectY", 1);
- // outputX outputY 是裁剪图片宽高
- intent.putExtra("outputX", 150);
- intent.putExtra("outputY", 150);
- intent.putExtra("return-data", true);
- startActivityForResult(intent, 9);
- }
- }
好了,到目前为止,代码已经贴完了,但有重要的一点,要在刚开始做东西时就应该想清楚自己需要什么东西,有没权限啊SD卡空间啊什么问题的,所以,没权限的不行,报错,所以加上以下权限即可:
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
- <!-- 相机使用权限 -->
- <uses-permission android:name="android.permission.CAMERA" />
- <uses-feature android:name="android.hardware.camera" />
- <uses-feature android:name="android.hardware.camera.autofocus" />
这些权限网上都有,搜下拍照要什么权限就可以了,如果你觉得没太懂的话,就自己在小马上传的附件里面打断点跟下就知道是怎么走的咯,很简单的DEMO,但在网上找的相机都会有错,所以自己试了下,可以了就贴出来,朋友们有好的方法可以指点小马一下,三人行,必有我师,小马知错就改,吼吼,学习愉快!
附件:http://down.51cto.com/data/2359470
本文转自华华世界 51CTO博客,原文链接:http://blog.51cto.com/mzh3344258/741318,如需转载请自行联系原作者