我花了几个小时在一个看起来并不复杂的问题上,但是尽管有关于这个主题的所有现有消息,但我仍然没有找到解决方案......
我正在使用查看页,在适配器中我有一个按钮和一个图像视图。我想在使用myWallpaperManager.setBitmap(image)单击按钮时将图像视图中的图片设置为墙纸。在此之前,我调整图片大小以适应屏幕尺寸。墙纸已更改,但图片保持缩放和裁剪。我想设置带有整个图片的壁纸。我对getDefaultDisplay()的宽度和高度以及myWallpaperManager.getDesiredMinimumHeight/Width()的宽度和高度具有相同的值。
我尝试了许多不同的方法,但没有奏效。我不知道还能做什么!非常感谢您的回答。
这是代码:
Button ButWallpaper = (Button) viewLayout.findViewById(R.id.ButWallpaper);
ButWallpaper.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View arg0) {
Bitmap image;
Bitmap imagelarge = ((BitmapDrawable)imageView2.getDrawable()).getBitmap();
int Measuredwidth = 0;
int Measuredheight = 0;
Point size = new Point();
WindowManager w = _activity.getWindowManager();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
w.getDefaultDisplay().getSize(size);
Measuredwidth = size.x;
Measuredheight = size.y;
}else{
Display d = w.getDefaultDisplay();
Measuredwidth = d.getWidth();
Measuredheight = d.getHeight();
}
Log.i("TAG", String.valueOf(Measuredwidth));
Log.i("TAG", String.valueOf(Measuredheight));
image = Bitmap.createScaledBitmap(imagelarge, Measuredwidth, Measuredheight,true);
// TODO Auto-generated method stub
WallpaperManager myWallpaperManager
= WallpaperManager.getInstance(_activity.getApplicationContext());
try {
myWallpaperManager.setBitmap(image);
myWallpaperManager.suggestDesiredDimensions(Measuredwidth, Measuredheight);
Log.i("TAG", String.valueOf(myWallpaperManager.getDesiredMinimumHeight()));
Log.i("TAG", String.valueOf(myWallpaperManager.getDesiredMinimumWidth()));
Toast.makeText(_activity.getApplicationContext(), "Wallpaper changed", toast.LENGTH_LONG).show();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}});
你可以试试我的代码:
try{
DisplayMetrics metrics = new DisplayMetrics();
WindowManager windowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
windowManager.getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;
int width = metrics.widthPixels;
Bitmap tempbitMap = BitmapFactory.decodeFile(path);
Bitmap bitmap = Bitmap.createScaledBitmap(tempbitMap,width,height, true);
WallpaperManager wallpaperManager = WallpaperManager.getInstance(mContext);
wallpaperManager.setWallpaperOffsetSteps(1, 1);
wallpaperManager.suggestDesiredDimensions(width, height);
try {
wallpaperManager.setBitmap(bitmap);
Toast.makeText(mContext, "Set wallpaper success", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
}catch(Exception e){
Log.e("DATA", "Cannot set image as wallpaper", e);
}
还行!然后您添加权限:
<uses-permission android:name="android.permission.SET_WALLPAPER" />
<uses-permission android:name="android.permission.SET_WALLPAPER_HINTS" />
看看这是否有帮助:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;
int width = metrics.widthPixels;
Bitmap bitmap = Bitmap.createScaledBitmap(yourimagebitmap, width, height, true);
WallpaperManager.getInstance(MyActivity.this).setBitmap(bitmap);
来源:安卓设置壁纸出错