Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there any code to set wallpaper without cropping and zooming in android?

i am creating a gallery app , my first app and this is my code

    Bitmap bmd = BitmapFactory.decodeStream(is);

    try{
        getApplicationContext().setWallpaper(bmd);
    }catch(IOException e){
        e.printStackTrace();
    }

The above code sets wallpaper But the wallpaper gets cropped or zoomed after it got set !! Is there any modification i can do in the above code so that i can set wallpaper without zooming or cropping when it is set !!!!

Plzzzz help me out !! Thanks in advance :-)

like image 273
Kalpana Avatar asked Oct 05 '22 15:10

Kalpana


1 Answers

I am late to reply this. Hope it helps you and those who visits your question:

In your case, try to adjust your picture to device size by somewhat like this:

DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
int width = displayMetrics.widthPixels << 1; // best wallpaper width is twice screen width

// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, options);

// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, width, height);

// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
Bitmap decodedSampleBitmap = BitmapFactory.decodeFile(path, options);

WallpaperManager wm = WallpaperManager.getInstance(this);
try {
    wm.setBitmap(decodedSampleBitmap);
} catch (IOException e) {
    Log.e(TAG, "Cannot set image as wallpaper", e);
}

If above code doesn't work, do a small modification:

...
WallpaperManager wm = WallpaperManager.getInstance(this);
try {
    wm.setBitmap(decodedSampleBitmap);
    wm.suggestDesiredDimensions(width, height);
} catch (IOException e) {
    Log.e(TAG, "Cannot set image as wallpaper", e);
}

And the method calculateInSampleSize:

public static int calculateInSampleSize(
            BitmapFactory.Options options, int reqWidth, int reqHeight) {
    // Raw height and width of image
    final int height = options.outHeight;
    final int width = options.outWidth;
    int inSampleSize = 1;

    if (height > reqHeight || width > reqWidth) {

        final int halfHeight = height / 2;
        final int halfWidth = width / 2;

        // Calculate the largest inSampleSize value that is a power of 2 and keeps both
        // height and width larger than the requested height and width.
        while ((halfHeight / inSampleSize) > reqHeight
                && (halfWidth / inSampleSize) > reqWidth) {
            inSampleSize *= 2;
        }
    }

    return inSampleSize;
}

and remember to add permissions:

<uses-permission android:name="android.permission.SET_WALLPAPER_HINTS"/>
<uses-permission android:name="android.permission.SET_WALLPAPER"/>
like image 81
Chintan Soni Avatar answered Oct 10 '22 02:10

Chintan Soni