У меня есть приложение для Android, которое позволяет пользователю выбрать фотографию, которая уже была сделана. Когда пользователь выбирает фотографию, я захватываю информацию URI для этой фотографии, использую эту информацию для создания растрового изображения, а затем устанавливаю растровое изображение в ImageView. Все это прекрасно работает.
Затем я даю пользователю возможность выбрать изображение для просмотра. Когда пользователь выбирает просмотр изображения, я запускаю намерение ACTION_VIEW, передавая данные URI.
Intent intent = new Intent(Intent.ACTION_VIEW, pictureUri);
startActivity(intent);
Как вы можете видеть, это очень простой код, ничего особенного не происходит. Проблема в том, что когда я запускаю этот код на своем Droid под управлением Android 2.1, примерно в 6 или 7 раз из 10, приложение отобразит правильное изображение. Но другие 3 или 4 раза, мне показывают неправильную картину. Кроме того, каждый раз, когда отображается неправильное изображение, всегда отображается одинаковое неправильное изображение. Тот факт, что я вижу правильную картинку в большинстве случаев, заставляет меня поверить, что все, что я делаю в коде, в порядке, так что кто-нибудь может сказать мне, если вы видели эту проблему раньше, и еще лучше, есть ли решение?
Вот точная последовательность, которую я наблюдаю на своем Droid, когда я запускаю это (Примечание: URI изображения уже сохранен до начала действия):
- I choose "View Photo" in the Activity
- When things work, I get taken to the gallery and shown image 74
- Each time things do not work, I get shown image 82
Имейте в виду, что когда я запускаю Activity с уже сохраненным URI (полученным из базы данных), я устанавливаю ImageView на основе данных URI в onCreate(), а изображение, отображаемое в ImageView, ВСЕГДА правильное изображение, Это не до тех пор, пока я фактически не решит просмотреть изображение с помощью ACTION_VIEW, что я вижу странное поведение. И я знаю, что это не что-то конкретное об этих двух фотографиях. Я наблюдал это поведение, используя другие фотографии в прошлом, и получил то же поведение.
Во-первых, я бы отлаживал/регистрировал значение pictureUri
как при первоначальном выборе пользователем, так и перед тем, как вы введете его в свое намерение ACTION_VIEW
, чтобы убедиться, что это то, что вы ожидаете от него эти места. Похоже, что после того, как пользователь выберет pic, вы храните uri локально и снова захватываете его, чтобы начать свое намерение. Так что, может быть, вы
Без дополнительного кода (как вы сохраняете и восстанавливаете uris) это сложно сказать, но это то, где я начну искать.