Начать с разрешения добавления в манифесте, а также запросить разрешение у пользователей во время выполнения.
Подробнее о разрешениях времени выполнения
Используйте эту библиотеку Декстера дляспросить разрешение во время выполнения очень просто!
Я обычно использую этот код, предоставляя мне оба варианта для получения изображения с камеры или выбора из галереи.
protected void pickImageFromGallery() {
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/*");
context.startActivityForResult(Intent.createChooser(intent, "Select File"), 1);
}
protected void pickImageFromCamera() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
context.startActivityForResult(intent, 0);
}
и обработки результатов обоих вonActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 0:
try{
if (data != null) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
userProfilePic.setImageBitmap(photo);
} else {
}
}catch (Exception e){
e.printStackTrace();
}
break;
case 1:
if (data != null) {
Uri uri = data.getData();
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
userProfilePic.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
} else {
Toast.makeText(this, "Something Went Wrong", Toast.LENGTH_SHORT).show();
}
break;
}