Активность камеры, приводящая к тому, что URI обнуляется при изменении ориентации экрана - PullRequest
4 голосов
/ 09 февраля 2012

Я устанавливаю элемент данных imageUri и передаю его в намерение, которое запускает действие камеры. В операции с камерой я делаю снимок и поворачиваю экран перед установкой флажка, чтобы вернуться к своей деятельности. Когда я делаю это, imageUri имеет значение null, когда вызывается onActivityResult. Если я не поворачиваю экран, все работает нормально, и imageUri не равно нулю.

onConfigurationChanged не вызывается в моей деятельности, поэтому проблема не в этом.

public void takePhoto() {
    //define the file-name to save photo taken by Camera activity
    fileName = getFileNameDate();
    //create parameters for Intent with filename
    ContentValues values = new ContentValues();
    values.put(MediaStore.Images.Media.TITLE, fileName);
    values.put(MediaStore.Images.Media.DESCRIPTION,"Image capture by camera");

    imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

    //create new Intent
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
    intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
    startActivityForResult(intent, picture_result_code);

}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.i("Camera_onActivityResult", "Got activity result requestCode = " + requestCode + " resultCode: " + resultCode);
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
    case picture_result_code:
        if (resultCode == Activity.RESULT_OK) {
            try {
                Log.i("Camera", "Preparing to upload image...");

                picFile = convertImageUriToFile(imageUri);  // Here imageUri is null and causing crash

                uploadFile(picFile.getPath());

            } catch (Exception e) {
                Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT).show();
                Log.e("Camera", e.toString());
                e.printStackTrace();
            }
        }
    }
}

Есть ли другой способ получить изображение?

Спасибо

Ответы [ 2 ]

2 голосов
/ 09 февраля 2012

Я считаю, imageUri - это поле в вашей деятельности, верно? если вы поворачиваете устройство, действие уничтожается и перезапускается, и ваше поле становится пустым. Вы должны сохранить URI как часть состояния вашей активности. Есть несколько возможных методов для достижения этой цели, в том числе использование onSaveInstanceState (), подробности см. Здесь: http://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState%28android.os.Bundle%29

0 голосов
/ 09 апреля 2013

Блокировка ориентации экрана вызывающей операции исправила проблему для меня.Если вы не хотите блокировать свою, вы можете создать активность с заблокированной ориентацией только для вызова камеры, а затем вернуть результат в «реальную» активность.определение активности в вашем манифесте (обе строки):

android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation|screenSize"

«портрет» также может быть «пейзажем»

...