Не удается получить код камеры из документов Android для работы.
Я использую код из http://developer.android.com/training/camera/photobasics.html
код:
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {
File photoFile = null;
try {
photoFile = FileUtilities.createImageFile();
} catch (IOException ex) {
// Error occurred while creating the File
Toast.makeText(getActivity(),"Error!",Toast.LENGTH_SHORT).show();
}
if (photoFile != null) {
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(photoFile));
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
}
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) {
Bundle extras = data.getExtras(); //error
//code after this doesn't get executed
}
}
Я пытаюсь получить доступ к миниатюре и картинке, хранящейся на устройстве. Но по какой-то причине, когда я пытаюсь выполнить код, я получаю исключение нулевого указателя в data.getExtras(); часть.
Что мне здесь не хватает?
Ответы
Ответ 1
Это один из известных событий в области разработки Android.
Android Intent не гарантирует получение захваченного изображения в data.getExtras()
, особенно пользователь использует приложение сторонней камеры/изображения. Вы можете найти множество проб и предложений в здесь и где-нибудь в googled с "андроидной камерой намерение null".
Некоторые из них такие, как показано ниже.
-
data.getExtras().get("data");
-
data.getExtras()
с другим ключом (например, "фото" )
-
data.getData()
-
Uri.fromFile(f)
для EXTRA_OUTPUT
предопределенного пути.
-
Uri.fromFile(f)
с некоторым случайным именем файла (формат даты или времени IMG-xxx) без сохранения определения EXTRA_OUTPUT
.
Я рекомендую вам найти его, используя точку останова, маршрут маршрута, который задан. Было бы хорошо проверить все их в подходе if-else if-else
.
Кроме того, внимательно просмотрите отчет о сбое после выпуска приложения. Вы можете получить ошибку из приведенных выше испытаний.
Ответ 2
Чтобы получить ThumbNail, вам не нужно создавать файл и т.д., пожалуйста, попробуйте этот код ниже.
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Ensure that there a camera activity to handle the intent
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
и получить результаты.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get("data");
imgView.setImageBitmap(imageBitmap);
}
}
imgView - это ImageView, в котором вы хотите установить ThumbNail.
Если вы хотите создать файл, а затем попробуйте это, [который не нужен для миниатюры], вы можете попробовать добавить следующие разрешения для манифеста, поскольку вы пытаетесь читать и записывать на хранение.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
Все самое лучшее.