您的位置:首页 > 移动开发 > Android开发

Android实现拍照及从相册获取图片

2017-08-04 10:19 344 查看
首先要检查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()方法

@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)));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: