Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I set Wallpaper in android using code?

Tags:

android

I am developing an application that shows the different photos from the server and the user can set selected photos as wallpaper of its device I used the given code to set wallpaper it works but the image was not set correctly it does not fit to screen. I used this code.

String dirPath = getFilesDir().toString();
String folder = mPhotos.get(nextPosition - 1).getCategory();
String filePath = dirPath + "/PhotoViewer/" + folder + "/"
        + mPhotos.get(nextPosition - 1).getFileName();
File imageFile = new File(filePath);
Bitmap bitmap = BitmapFactory.decodeFile(imageFile
        .getAbsolutePath());
WallpaperManager myWallpaperManager = WallpaperManager
        .getInstance(getApplicationContext());
  try
  {
    myWallpaperManager.setBitmap(bitmap);
    Toast.makeText(PhotoActivity.this, "Wallpaper set",
            Toast.LENGTH_SHORT).show();
  } catch(IOException e){
    Toast.makeText(PhotoActivity.this, "Error setting wallpaper",
            Toast.LENGTH_SHORT).show();
}
like image 410
nishitpatel Avatar asked Nov 28 '22 01:11

nishitpatel


2 Answers

To set wallpaper in android use the below code: By using WallpaperManager Class

Button buttonSetWallpaper = (Button)findViewById(R.id.set);
ImageView imagePreview = (ImageView)findViewById(R.id.preview);
imagePreview.setImageResource(R.drawable.five);
 
buttonSetWallpaper.setOnClickListener(new Button.OnClickListener() {
    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        WallpaperManager myWallpaperManager 
        = WallpaperManager.getInstance(getApplicationContext());
        try {
            myWallpaperManager.setResource(R.drawable.five);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
});

Need to set permission in Manifest:

<uses-permission android:name="android.permission.SET_WALLPAPER"/>
like image 98
VenSan Avatar answered Dec 23 '22 15:12

VenSan


You can try resizing your bitmap 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);
    }

Your calculateInSampleSize class can be like this

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) {

        // Calculate ratios of height and width to requested height and width
        final int heightRatio = Math.round((float) height / (float) reqHeight);
        final int widthRatio = Math.round((float) width / (float) reqWidth);

        // Choose the smallest ratio as inSampleSize value, this will guarantee
        // a final image with both dimensions larger than or equal to the
        // requested height and width.
        inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
    }

    return inSampleSize;
}

Refer this link for further clarifications

like image 27
Parvaz Bhaskar Avatar answered Dec 23 '22 13:12

Parvaz Bhaskar