onActivityResult возвращает нулевое намерение
Я пытаюсь захватить изображение с камеры. Но он возвращает нулевой Intent onActivityResult . Вот мой код
CaptureImageFromCamera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 7);
}
});
А также onActivityResult
является
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 7 && resultCode == RESULT_OK) {
try {
if(data.getData() == null) {
bitmap = (Bitmap)data.getExtras().get("data");
} else {
bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), data.getData());
}
ImageViewHolder.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Я новичок в Android, поэтому, пожалуйста, объясните ответ подробно. Заранее спасибо..!
3 ответа
Начните свою работу, передав намерение через это:
startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE), 100);
поэтому после захвата изображения с камеры используйте для получения данных об изображениях намеренно:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Uri yourCapturedImage = intent.getData();
}
Убедитесь, что вы добавили разрешения камеры, разрешения записи в манифесте, а также перекрестную проверку разрешений во время выполнения.
Используйте ваше намерение, как показано ниже, и укажите путь, куда будет записываться захваченное изображение -
intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
Uri outputUri = Uri.fromFile("path of your directory");
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputUri);
startActivityForResult(intent, 7);
Uri imageUri = data.getData()
больше не будет работать.. сначала получите
bitmap
из
data
как это:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
val imageBitmap = data.extras.get("data") as Bitmap
imageView.setImageBitmap(imageBitmap)
}
}
затем сохраните растровое изображение... подробности можно найти здесь:
Вы также можете использовать setImageURI()
в onActivityResult()
вместо setImageBitmap()
Прежде всего добавьте разрешения камеры в Android манифест. Если ваша версия для Android больше, чем Lollipop, то вам нужно добавить разрешения во время выполнения. См. Документацию здесь
<uses-permission android:name="android.permission.CAMERA"/>
и тогда ваш код будет
CaptureImageFromCamera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 7);
}
});
а затем использовать setImageUrI()
в вашем onActivityResult()
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode)
{
case 7:
/*case 7 for image results and display image in imageview via Uri*/
if (resultCode == RESULT_OK)
{
Uri imageUri = data.getData();
ImageViewHolder.setImageURI(imageUri);
}
return;
default:
return;
}
}