установка обоев через код - PullRequest
2 голосов
/ 14 июня 2010

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

Проблема возникает, когда размер изображения (и /или разрешение) больше, чем ожидает Android.Это приводит к сбою моего модуля.

И как будто этого было недостаточно, когда пользователь пытается выбрать другие обои (и в моем тестовом случае «другие» обои также были размером> 700 КБ), то приложение вылетает с «OutOfMemoryException»...

Помогите мне здесь, ребята !!!

Для намерения галереи я использую:

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"),SELECT_IMAGE);

Для установки обоев я использую:

InputStream is = getContentResolver().openInputStream(Uri.parse(uri_returned_from_intent)); 
Bitmap bgImage = BitmapFactory.decodeStream(is);//OutOfMemory error thrown here
setWallpaper(bgImage);

Итак, у меня есть две проблемы:

  1. Как обрезать изображение перед тем, как установить его в качестве обоев ...
  2. Не могу понять y OutOfMemoryException выброшено, потому что ни одна изразмеры моего изображения превышают даже 1 МБ ... и я думаю, что бюджет виртуальной машины в случае N1 составляет 24 МБ, если я не ошибаюсь ...

1 Ответ

3 голосов
/ 14 июня 2010

Вы должны декодировать с опцией inSampleSize, чтобы уменьшить потребление памяти.

Другой параметр inJustDecodeBounds поможет вам найтиправильное значение inSampleSize

...