如何在Android中使用代码设置壁纸?

时间:2013-04-09 03:43:58

标签: android

我正在开发一个应用程序,显示来自服务器的不同照片,用户可以将所选照片设置为其设备的壁纸我使用给定代码设置壁纸工作但图像设置不正确它不适合屏幕。我用过这段代码。

            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();
        }

2 个答案:

答案 0 :(得分:29)

在android下面设置壁纸代码:使用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();
        }
    }
});

需要在 Manifest:

中设置权限
<uses-permission android:name="android.permission.SET_WALLPAPER"/>

答案 1 :(得分:4)

您可以尝试像这样调整位图大小

   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);
    }

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

        // 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;
}

请参阅this链接以获取进一步说明