Android: получить изображение из галереи без взаимодействия с пользователем - PullRequest
0 голосов
/ 03 октября 2011

Я хочу получить изображение, если оно есть, из галереи без необходимости выбирать изображение из галереи. Я хочу сделать это программно. Я попробовал следующий подход:

    String[] projection = { MediaStore.Images.Media.DATA };
         Cursor cursor = new Activity().managedQuery( MediaStore.Images.Media.INTERNAL_CONTENT_URI, projection, null, null, null);
            if (cursor != null) {
                // HERE YOU WILL GET A NULLPOINTER IF CURSOR IS NULL
                // THIS CAN BE, IF YOU USED OI FILE MANAGER FOR PICKING THE MEDIA
                int column_index = cursor
                        .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                cursor.moveToFirst();
                BitmapFactory.Options options = new BitmapFactory.Options();;
                options.inSampleSize = 1;
                Bitmap bm = BitmapFactory.decodeFile(
                        cursor.getString(column_index),options);
                remoteView.setImageViewBitmap(R.id.image,bm);

Я вызываю этот фрагмент кода из рабочего потока, а не из основного потока пользовательского интерфейса. Правильный ли этот подход? если нет, то какой может быть лучший способ получить изображение из галереи без взаимодействия с пользователем?

Спасибо.

1 Ответ

1 голос
/ 03 октября 2011

Я думаю, что этот вопрос состоит из двух частей: получение изображения из галереи телефона и обновление пользовательского интерфейса.

Похоже, ваш метод подходит для получения изображений из галереи. Другой метод подробно описан здесь: http://developer.android.com/guide/topics/data/data-storage.html#filesExternal.

RuntimeException вы видите, потому что вы пытаетесь обновить пользовательский интерфейс в рабочем потоке. Платформа Android требует, чтобы все изменения пользовательского интерфейса происходили в потоке пользовательского интерфейса. Вам нужно будет позвонить Activity.runOnUiThread() после выполнения запроса, чтобы обновить пользовательский интерфейс.

...