Android实现拍照及从相册获取图片
2017-08-04 10:19
344 查看
首先要检查android6.0的权限Android7.0的在拍照时检查
权限要重写onRequestPermissionsResult()方法
7.0拍照的接口http://blog.csdn.net/jdfkldjlkjdl/article/details/59586342
发送广播提醒手机刷新相册
//动态相机权限: 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()方法
@Override public void onRequestPermissionsResult(int requestCode 4000 , @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))); }
相关文章推荐
- Android 实现拍照 获取相册 图片压缩 图片旋转 图片转存
- Android获取本地相册图片和拍照获取图片的实现方法
- Android 拍照或者从相册获取图片的实现
- Android打开相册vs拍照获取图片的原理实现
- Android打开相册vs拍照获取图片的原理实现
- Android实现类似QQ头像点击打开相册或者拍照,并获取裁剪后的图片
- Android 拍照或者从相册获取图片的实现
- Android 相册选择照片或拍照获取图片系统6.0及7.0实现
- Android 调用相册 拍照 实现系统控件缩放 切割图片 .
- 【Android Intent】Android调用相册、拍照实现缩放、切割图片
- Android 调用相册 拍照 实现系统控件缩放 切割图片
- Android开发,调用相册图片或者调用相机进行拍照获取图片
- android --拍照,从相册获取图片,兼容高版本,兼容小米手机
- Android调用相册拍照控件实现系统控件缩放切割图片
- android 拍照或从相册获取图片 返回 bitmap
- Android相机、相册获取图片,解决相机拍照图片被压缩模糊的情况
- Android调用相册、拍照实现缩放、切割图片
- [Android实例教程] 教你如何拍照+相册选择图片+剪裁图片完整实现
- Android 调用相册 拍照 实现系统控件缩放 切割图片
- Android 调用相册 拍照 实现系统控件缩放 切割图片