Tapete durch Code setzen

Ich habe versucht, eine App zu erstellen, mit der der Benutzer auch das Hintergrundbild auswählen kann, das er einstellen möchte. Ich habe das geschafft, indem ich die Gallery Intent aufgerufen habe. Sobald der Benutzer ein bestimmtes Bild ausgewählt hat, wird der Datenpfad des Bildes an mich zurückgegeben, und ich kann dem Benutzer eine Vorschau anzeigen, indem ich das Bild auf eine Bildansicht setze.

Das Problem tritt auf, wenn die Bildgröße (und / oder Auflösung) größer ist als von Android erwartet. Dies führt zum Ausfall meines Moduls.

Und als ob dies nicht genug wäre, wenn der Benutzer versucht, ein anderes Hintergrundbild auszuwählen (und in meinem Testfall war das "andere" Hintergrundbild ebenfalls größer als 700 KB), stürzt die App mit der "OutOfMemoryException" ab ...

Hilf mir hier Leute !!!

Für Gallery Intent verwende ich:

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

Zum Einstellen des Hintergrunds verwende ich:

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

So habe ich 2 Probleme zu behandeln:

So schneiden Sie das Bild zu, bevor Sie es als Hintergrundbild festlegen ...Kann nicht verstehen, dass OutOfMemoryException ausgelöst wird, da keine meiner Image-Größen 1 MB überschreitet ... und ich denke, das VM-Budget für den Fall, dass N1 24 MB hat, wenn ich mich nicht irre ...

Antworten auf die Frage(2)

Ihre Antwort auf die Frage