Android实现拍照及从相册获取图片
来源:互联网 发布:积分编排软件 编辑:程序博客网 时间:2024/05/22 00:52
首先要检查android6.0的权限Android7.0的在拍照时检查
//动态相机权限:if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(MainActivity.this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 000);} else { //权限已经被授予,在这里直接写要执行的相应方法即可 toPhoto();}
//动态图库权限if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(MainActivity.this, new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, 111);} else { //权限已经被授予,在这里直接写要执行的相应方法即可 selectPicture();}权限要重写onRequestPermissionsResult()方法
@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case 000: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { toPhoto(); } else { Toast.makeText(mActivity, "权限被拒绝", Toast.LENGTH_SHORT).show(); } break; case 111: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { selectPicture(); } else { Toast.makeText(mActivity, "权限被拒绝", Toast.LENGTH_SHORT).show(); } break; default: super.onRequestPermissionsResult(requestCode, permissions, grantResults); }}
拍照
public void toPhoto()//拍照 {Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);outputImage = new File(Environment.getExternalStorageDirectory()+File.separator+System.currentTimeMillis()+".jpg");int currentapiVersion=Build.VERSION.SDK_INT;if(currentapiVersion<24){ imageUri=Uri.fromFile(outputImage); intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);}else{ ContentValues contentValues=new ContentValues(1); contentValues.put(MediaStore.Images.Media.DATA,outputImage.toString()); imageUri= getApplication().getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,contentValues); intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);}startActivityForResult(intent,000);}选择相册的图片public void selectPicture()//从相册选择图片{ Intent intent=new Intent(); intent.setAction(Intent.ACTION_PICK);//Pick an item from the data intent.setType("image/*");//从所有图片中进行选择 startActivityForResult(intent, 1);}最后从onActivityResult()方法中获取图片的位置@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case 0: if(resultCode==RESULT_OK){ tv_pinfen02.setVisibility(View.GONE); tv_pinfen01.setVisibility(View.GONE);// String date=data.getData().toString();// Log.e("text",date);// Bitmap bitmap=(Bitmap)data.getExtras().get("data"); BitmapFactory.Options options=new BitmapFactory.Options(); options.inJustDecodeBounds=true; BitmapFactory.decodeFile(outputImage.getAbsolutePath(),options);// WindowManager manager=getActivity().getWindowManager();// int screenWidth=manager.getDefaultDisplay().getWidth();// int screenHeight=manager.getDefaultDisplay().getHeight(); WindowManager manager=getWindowManager(); DisplayMetrics outMetrics=new DisplayMetrics(); manager.getDefaultDisplay().getMetrics(outMetrics);// int screenWidth=outMetrics.widthPixels;// int screenHeight=outMetrics.heightPixels; int screenWidth=480; int screenHeight=800; int width=options.outWidth; int height=options.outHeight; int sampleSize=1; Log.e("text","screenWidth===="+screenWidth); Log.e("text","screenHeight==="+screenHeight); while((width/sampleSize)>screenWidth||(height/sampleSize)>screenHeight){ sampleSize*=2; } options.inSampleSize=sampleSize; options.inJustDecodeBounds=false; options.inPreferredConfig= Bitmap.Config.RGB_565; options.inDither=true; Bitmap bitmap=BitmapFactory.decodeFile(outputImage.getAbsolutePath(),options);// Bitmap bitmap=BitmapFactory.decodeFile(outputImage.getAbsolutePath());//可能会造成内存溢出 iv_image.setImageBitmap(bitmap); } break; case 1: if (resultCode==RESULT_OK) {//从相册选择照片不裁切 try { tv_pinfen02.setVisibility(View.GONE); tv_pinfen01.setVisibility(View.GONE); Uri selectedImage = data.getData(); //获取系统返回的照片的Uri String[] filePathColumn = { MediaStore.Images.Media.DATA }; Cursor cursor =getContentResolver().query(selectedImage, filePathColumn, null, null, null);//从系统表中查询指定Uri对应的照片 cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String picturePath = cursor.getString(columnIndex); //获取照片路径 cursor.close(); BitmapFactory.Options options=new BitmapFactory.Options(); options.inJustDecodeBounds=true; BitmapFactory.decodeFile(picturePath,options); int simpleSize=1; WindowManager manager=getWindowManager();// int screenWidth=manager.getDefaultDisplay().getWidth();// int screenHeight=manager.getDefaultDisplay().getHeight(); int screenWidth=480; int screenHeight=800; int width=options.outWidth; int heigth=options.outHeight; while((width/simpleSize)>screenWidth||(heigth/simpleSize)>screenHeight){ simpleSize*=2; } options.inSampleSize=simpleSize; options.inJustDecodeBounds=false; options.inPreferredConfig=Bitmap.Config.RGB_565; options.inDither=true; Bitmap bitmap=BitmapFactory.decodeFile(picturePath,options); iv_image.setImageBitmap(bitmap); } catch (Exception e) { // TODO Auto-generatedcatch block e.printStackTrace(); } } break;}
最后附一个拍照从相册选择图片并截图的链接http://www.cnblogs.com/w-y-f/p/4028379.html
7.0拍照的接口http://blog.csdn.net/jdfkldjlkjdl/article/details/59586342
发送广播提醒手机刷新相册
File file = new File(path);if (file.exists()) { sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));}
File file = new File(path);if (file.exists()) { sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));}
阅读全文
0 0
- Android实现拍照及从相册获取图片
- Android 拍照、从相册获取及裁剪的相关实现
- 从相册\拍照获取图片
- 最简单实现从相册和拍照中获取图片
- Android 实现从相册选择图片,拍照选择图片
- android 拍照或从相册获取图片 返回 bitmap
- Android拍照或从系统相册获取图片
- Android 相册选择照片或拍照获取图片系统6.0及7.0实现
- UIImagePickerController从拍照、图库、相册获取图片
- UIImagePickerController从拍照、图库、相册获取图片
- UIImagePickerController从拍照、图库、相册获取图片
- UIImagePickerController从拍照、图库、相册获取图片
- UIImagePickerController从拍照、图库、相册获取图片
- UIImagePickerController从拍照、图库、相册获取图片
- UIImagePickerController从拍照、图库、相册获取图片
- UIImagePickerController从拍照、图库、相册获取图片
- Android打开相册vs拍照获取图片的原理实现
- Android打开相册vs拍照获取图片的原理实现
- 微信公众号入门配置
- hadoop eclipse 权威指南天气代码远程调试
- python-scrapy教程(三):实战——采集芒果TV综艺节目信息
- cat sed命令
- [编程题] 黑白卡片
- Android实现拍照及从相册获取图片
- keras TimeDistributed 包装器
- Python list排序的两种方法及实例讲解
- HDOJ 2015 偶数求和问题
- Mysql-01
- ELK-01
- 2017 Multi-University Training Contest
- java面试Linux常用命令使用方法大全
- 程序员的职业素养_心得体会