我想知道当前墙纸的文件名或文件大小。
我知道如何获取当前墙纸的可绘制对象,如下所示:

ImageView view = new ImageView(this);
view.setImageDrawable(WallpaperManager.getInstance(this).getDrawable());


但是,我找不到获取更多指定信息的方法。

我只想设置服务器,并使服务器每小时将一个墙纸发送到某个移动设备,几分钟后,我想检查移动设备的当前墙纸是否是服务器之前发送给它的墙纸。

最佳答案

不幸的是,对于静态墙纸,除了Drawable公开的信息之外,没有其他信息。您需要将服务器最后发送到设备的Bitmap存储在后台服务中,然后取出正​​在运行的墙纸并手动比较位图。如果API级别为12或更高,则可以使用Bitmap.sameAs方法,但是在此之前,您需要手动比较像素。

public static boolean equals(Bitmap bitmap1, Bitmap bitmap2)
{
    if (bitmap1 == null || bitmap2 == null)
    {
        return false;
    }
    if(Build.VERSION.SDK_INT > 11)
    {
        return bitmap1.sameAs(bitmap2);
    }
    else
    {
        ByteBuffer buffer1 = ByteBuffer.allocate(bitmap1.getHeight() * bitmap1.getRowBytes());
        bitmap1.copyPixelsToBuffer(buffer1);

        ByteBuffer buffer2 = ByteBuffer.allocate(bitmap2.getHeight() * bitmap2.getRowBytes());
        bitmap2.copyPixelsToBuffer(buffer2);

        return Arrays.equals(buffer1.array(), buffer2.array());
    }
}

07-26 02:43