Android 相机调用简化工具
2016-03-07 16:34
399 查看
调用安卓相机的代码稍微有点复杂,我将其进行了包装,简化调用的过程。
这个包装类能实现:调用相机、修改尺寸、获得位图 这三个基本功能。
由于涉及到向SD卡中写数据的操作,因此需要在 AndroidManifest.xml 中声明权限:
创建一个 TakePhoto 类,代码如下:
最后在 Activity 中测试,核心代码如下:
运行截图:
这个包装类能实现:调用相机、修改尺寸、获得位图 这三个基本功能。
由于涉及到向SD卡中写数据的操作,因此需要在 AndroidManifest.xml 中声明权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
创建一个 TakePhoto 类,代码如下:
import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Environment; import android.provider.MediaStore; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; public class TakePhoto { private String imagePath; private String imageName; private Uri imageUri; public TakePhoto() { //默认保存在SD卡根目录 imagePath = Environment.getExternalStorageDirectory().toString(); imageName = "output_image.jpg"; } public TakePhoto(String imagePath, String imageName) { //自定义路径及文件名 this.imagePath = imagePath; this.imageName = imageName; } //调用相机 public Uri invokeCamera(Context context) { createUri(); Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); //启动相机程序 context.startActivity(intent); return imageUri; } //裁剪相片 public Uri editPicture(Context context) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(imageUri, "image/*"); intent.putExtra("scale", true); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); //启动裁剪程序 context.startActivity(intent); return imageUri; } //生成Uri对象 private void createUri() { File outputImage = new File(imagePath, imageName); try { //生成空白文件 if (outputImage.exists()) { outputImage.delete(); } outputImage.createNewFile(); } catch (IOException e) { e.printStackTrace(); } imageUri = Uri.fromFile(outputImage); } //得到Bitmap对象 public Bitmap getBitmap(Context context) { try { return BitmapFactory.decodeStream(context.getContentResolver().openInputStream(imageUri)); } catch (FileNotFoundException e) { e.printStackTrace(); } return null; } }
最后在 Activity 中测试,核心代码如下:
class OnClick implements View.OnClickListener { TakePhoto takePhoto = new TakePhoto(); @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn1: //调用相机 takePhoto.invokeCamera(MyActivity.this); break; case R.id.btn2: //修改尺寸 takePhoto.editPicture(MyActivity.this); break; case R.id.btn3: //获得图片 Bitmap bitmap = takePhoto.getBitmap(MyActivity.this); imageView.setImageBitmap(bitmap); break; default: break; } } }
运行截图:
相关文章推荐
- android应用程序如何调用支付宝接口(转)
- 基于Jenkins+git+gradle+pgyer的android持续集成
- android大众常用的五种布局
- android 删除某个目录及其子目录
- Snackbar-Android M新控件
- Android APK终极瘦身21招
- Android 数据存储
- Android ViewPager使用详解
- android逆向分析中常用的smali注入代码
- Android WebView实现原生与JS的交互
- Android应用与系统安全防御
- android 与H5交互之使用GPS定位
- Android Voip开发总结
- android布局大全
- Android安全输入设计与思考
- Android 5.0学习之AnimatedVectorDrawable
- Android VectorDrawable与SVG
- Android MediaStore裁剪图片分析
- android DiskLruCache解析,硬盘缓存
- Android系统启动过程详解