1 - Во-первых, вы должны проверить, есть ли в вашем манифесте разрешения:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
и функция:
<uses-feature
android:name="android.hardware.camera"
android:required="true" />
Если у вас уже есть, вы можете последовать моему примеру этого, давайте просто.
2 - Представьте, что у вас есть ImageView и кнопка в вашей деятельности.
Вы инициализируете свои компоненты и создадите функцию нажатия кнопки.
private boolean isCamera = false;
private Uri fileUri;
private ImageView mImageView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mImageView = layout.findViewById(R.id.mImageView);
Button mTakePhotoButton = layout.findViewById(R.id.mImageView);
mTakePhotoButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final CharSequence[] items = {"Take photo", "Cancel"};
isCamera = false;
AlertDialog.Builder alertDialog = new AlertDialog.Builder(getContext());
alertDialog.setTitle("Select Picture");
alertDialog.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
Intent intent;
switch (item) {
case CAMERA:
isCamera = true;
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (intent.resolveActivity(getContext().getPackageManager()) != null) {
try {
File photoFile = Utils.createImageFile();
fileUri = Uri.fromFile(photoFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(intent, 1);
} catch (IOException ex) {
Log.e("PROJECT_TEST", e.getMessage());
}
}
break;
/*case GALLERY:
intent = new Intent();
// Show only images, no videos or anything else
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
// Always show the chooser (if there are multiple options available)
startActivityForResult(Intent.createChooser(intent, getString(R.string.select_picture)), imageBox);
break;*/
default:
dialog.dismiss();
break;
}
}
});
alertDialog.show();
}
});
}
My Utils.createImageFile , функция, которая создает файл в каталоге устройства:
public static File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "img_" + timeStamp + ".png";
File storageDir = new File(Environment.getExternalStorageDirectory(), "MyFolder");
if (!storageDir.exists())
storageDir.mkdirs();
return new File(storageDir, imageFileName);
}
3 - Вы вернете свое изображение в imageView как onActivityResult
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
try {
Bitmap selectedImage;
if (!isCamera && data != null && data.getData() != null) {
fileUri = data.getData();
}
selectedImage = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), fileUri);
if (selectedImage != null) {
mImage1.setImageBitmap(selectedImage);
String directory = fileUri.toString();
Log.d("PROJECT_TEST", directory);
}
} catch (IOException e) {
e.printStackTrace();
Log.e("PROJECT_TEST", e.getMessage());
}
}
}
Obs: Я использую Fragment, если вы используете активность, вы измените getContext () на это .