调用摄像头拍照和从相册中选择照片
来源:互联网 发布:行知学园地址 编辑:程序博客网 时间:2024/05/21 20:33
public class MainActivity extends Activity {private static final int TAKE_PHOTO = 1;private static final int CROP_PHOTO = 2;private static final int CHOOSE_PHOTO = 3;private Button btn,btn1;private ImageView iv;private Uri imageUri;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);iv = (ImageView) findViewById(R.id.iv);btn = (Button) findViewById(R.id.btn);btn1 = (Button) findViewById(R.id.btn1);//直接拍照btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 创建File对象,用于存储拍照后的图片 //Environment.getExternalStorageDirectory()方法获取到的就是手机SD卡的根目录,后面跟的是图片的名字File outputImage = new File(Environment.getExternalStorageDirectory(), "output_image.jpg");try {if (outputImage.exists()) {outputImage.delete();}outputImage.createNewFile();} catch (IOException e) {e.printStackTrace();}//将File对象转换成Uri对象,标识它的唯一地址imageUri = Uri.fromFile(outputImage);//指定它的actionIntent intent = new Intent("android.media.action.IMAGE_CAPTURE");//指定图片的输出地址,Uriintent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);//启动相机程序startActivityForResult(intent, TAKE_PHOTO);}});btn1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//指定它的actionIntent intent=new Intent("android.intent.action.GET_CONTENT");//设置它的类型intent.setType("image/*");//打开相册startActivityForResult(intent, CHOOSE_PHOTO);}});}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {switch (requestCode) {case TAKE_PHOTO:if (resultCode == RESULT_OK) {//指定它的actionIntent intent = new Intent("com.android.camera.action.CROP");//设置数据和类型intent.setDataAndType(imageUri, "image/*");//是否保留比率intent.putExtra("scale", true);//指定图片的输出地址,Uriintent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);//启动裁剪程序startActivityForResult(intent, CROP_PHOTO);}break;case CROP_PHOTO:if (resultCode == RESULT_OK) {try {//将图片解析成Bitmap对象Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));//将裁减后的照片显示出来iv.setImageBitmap(bitmap);} catch (FileNotFoundException e) {e.printStackTrace();}}break;//从手机里面找case CHOOSE_PHOTO:if (resultCode == RESULT_OK) {//判断手机系统版本号if (Build.VERSION.SDK_INT>=19) {//4.4及以上系统使用这个方法处理图片handleImageOnKitKat(data);}else{//4.4及以下系统使用这个方法处理图片handleImageBeforeKitKat(data);}}break;default:break;}}@SuppressLint("NewApi")private void handleImageOnKitKat(Intent data) {String imagePath=null;Uri uri=data.getData();if (DocumentsContract.isDocumentUri(this, uri)) {//如果是document类型的Uri,则通过document id处理String docId=DocumentsContract.getDocumentId(uri);if ("com.android.providers.media.documents".equals(uri.getAuthority())) {//解析出数字格式的idString id=docId.split(":")[1];String selection =MediaStore.Images.Media._ID+"="+id;imagePath=getImagePath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,selection);}else if("com.android.providers.downloads.documents".equals(uri.getAuthority())){Uri contentUri=ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"),Long.valueOf(docId));imagePath=getImagePath(contentUri, null);}}else if ("content".equalsIgnoreCase(uri.getScheme())) {//如果不是document类型的Uri,则使用普通方式处理imagePath=getImagePath(uri, null);}displayImage(imagePath);}private void handleImageBeforeKitKat(Intent data){Uri uri=data.getData();String imagePath=getImagePath(uri, null);displayImage(imagePath);}private String getImagePath(Uri uri,String selection) {String path=null;//通过Uri和selection来获取真实地图片路径Cursor cursor=getContentResolver().query(uri, null, selection,null,null);if(cursor!=null){if (cursor.moveToFirst()) {path=cursor.getString(cursor.getColumnIndex(Media.DATA));}cursor.close();}return path;}private void displayImage(String imagePath){if (imagePath!=null) {Bitmap bitmap=BitmapFactory.decodeFile(imagePath);iv.setImageBitmap(bitmap);}else{Toast.makeText(this,"失败了",Toast.LENGTH_SHORT).show();}}}
权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
0 0
- 调用摄像头拍照和从相册中选择照片
- Android 调用摄像头拍照 以及 从相册中选择照片
- 调用摄像头拍照及从相册中选择照片
- Aandroid调用摄像头拍照和从相册选择照片
- Android之调用摄像头拍照和从相册中选择照片
- 调用摄像头拍照和从相册中选择
- 调用摄像头和相册(调用摄像头拍照和从相册中选择图片)
- android调用摄像头拍照,从相册中选择照片并裁剪
- Android从相册选择图片和调用系统摄像头拍照
- Android调用摄像头拍照和从相册中选择(上传、更换头像)
- 调用摄像头拍照和选择相册
- Android调用手机拍照以及从相册选择照片
- Android调用手机拍照以及从相册选择照片
- Android调用手机拍照以及从相册选择照片
- Android调用手机拍照以及从相册选择照片,剪裁
- Android调用手机拍照以及从相册选择照片
- Android调用手机拍照以及从相册选择照片
- Android调用手机拍照以及从相册选择照片
- POJ 3080 Blue jeanes
- Access_token的存储
- SDAU 练习二 10001
- NodeJs入门(一)
- [leetcode] 337. House Robber III 解题报告
- 调用摄像头拍照和从相册中选择照片
- 安卓面试基本考点
- Android Studio调试功能使用总结
- 第六周项目4—静态成员应用
- Android 中View类DrawingCache的使用
- 自定义控件 防优酷菜单
- Android移动APP开发笔记——最新版Cordova 5.3.1(PhoneGap)搭建开发环境
- 清理缓存iOS
- JSP大学实用教程(第2版)代码一