Frage

Ich habe versucht, eine App zu machen, die auch die Möglichkeit hatte zu lassen Benutzer auswählen Tapete er Set möchte. Ich habe dies geschafft, durch die Galerie Intent aufrufen. Sobald der Benutzer ein bestimmtes Bild, wird der Datenpfad des Bildes mir zurückgegeben, die dann i, indem das Bild auf einem Imageview dem Benutzer eine Vorschau.

Das Problem taucht auf, wenn die Bildgröße (und / oder Auflösung) größer ist als das, was erwartet Android. Dies führt zu einem Ausfall meines Moduls.

Und als ob dies nicht genug wäre, wen der Benutzer versucht, eine andere Hintergrundbild auswählen (und in meinem Testfall der „andere“ Tapete auch die Größe> 700kb war), dann die App stürzt mit der „OutOfMemoryException“ ...

Helppp mich hier guys !!!

Galerie Intent i Verwendung:

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

Zur Einstellung der Tapete i verwenden:

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

Also ich habe 2 Probleme zu behandeln:

  1. Wie das Bild zuzuschneiden, bevor Sie es als Hintergrundbild ...
  2. Cant versteht y OutOfMemoryException geworfen, Coz keiner meiner Bildgrößen auch 1MB nicht überschreiten ... und ich denke, das VM-Budget im Fall von N1 ist 24Mb wenn m nicht irrt ...
War es hilfreich?

Lösung

Sie sollten mit inSampleSize Option dekodieren Speicherverbrauch zu reduzieren.

Eine weitere Option inJustDecodeBounds können Ihnen helfen, richtigen inSampleSize Wert

finden
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top