每个项目都少不了拍照这个功能,因为你要让用户自己的设置头像
直接上代码
public class MainActivity extends AppCompatActivity{
private Uri imageUri;
private ImageView image;
private String path;
@Override
protected void onCreate (Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
image = (ImageView) findViewById(R.id.ima);
}
public void phone (View viw){
File outputImage = new File(Environment.getExternalStorageDirectory(), "output_image.jpg");
try{
if(outputImage.exists()){
outputImage.delete();
}
outputImage.createNewFile();
}catch(IOException e){
e.printStackTrace();
}
if(Build.VERSION.SDK_INT >= 24){
imageUri = FileProvider.getUriForFile(MainActivity.this, "com", outputImage);
}else{
imageUri = Uri.fromFile(outputImage);
}
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, 1);
}
public void phone1 (View view){
chooseFromGallery();
}
/**
* 从相册选择图片
*/
private void chooseFromGallery (){
//构建一个内容选择的Intent
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
//设置选择类型为图片类型
intent.setType("image/*");
//打开图片选择
startActivityForResult(intent, 2);
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data){
switch(requestCode){
case 1:
if(resultCode == RESULT_OK){
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(imageUri, "image/*");
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, 3);
}
break;
case 2:
if(data == null){
return;
}else{
//用户从图库选择图片后会返回所选图片的Uri
//获取到用户所选图片的Uri
imageUri = data.getData();
//返回的Uri为content类型的Uri,不能进行复制等操作,需要转换为文件Uri
// uri = convertUri(uri);
//startImageZoom(uri);
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(imageUri, "image/*");
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, 4);
}
break;
case 3:
try{
Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
path = imageUri.getPath();
image.setImageBitmap(bitmap);
}catch(FileNotFoundException e){
e.printStackTrace();
}
break;
case 4:
try{
Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
image.setImageBitmap(bitmap);
}catch(FileNotFoundException e){
e.printStackTrace();
}
//获取绝对路径
if(DocumentsContract.isDocumentUri(this, imageUri)){
String docId = DocumentsContract.getDocumentId(imageUri);
if("com.android.providers.media.documents".equals(imageUri.getAuthority())){
String id = docId.split(":")[1];
String selection = MediaStore.Images.Media._ID + "=" + id;
path = getImagePath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection);
}else if("com.android.providers.downloads.documents".equals(imageUri.getAuthority())){
Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(docId));
path = getImagePath(contentUri, null);
}else if("content".equalsIgnoreCase(imageUri.getScheme())){
path = imageUri.getPath();
}else if("file".equalsIgnoreCase(imageUri.getScheme())){
path = imageUri.getPath();
}else{
}
}else{
path = getImagePath(imageUri, null);
}
break;
}
}
private String getImagePath (Uri uri, String selection){
String path = null;
Cursor cursor = getContentResolver().query(uri, null, selection, null, null);
if(cursor != null){
if(cursor.moveToFirst()){
path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
}
cursor.close();
}
return path;
}
}
不要忘了添加权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>