在Android中插入壁纸

时间:2012-01-23 19:17:48

标签: android image wallpaper

我正在尝试将自定义壁纸添加到Android中的默认壁纸集。使用模拟器(2.3.3虚拟设备)我在/system/app/Launcher2.apk中找到了它们。我已经拉出APK并用apktool解码,在壁纸文件夹中添加壁纸,然后再用apktool重新编码APK。但是我无法将新的apk推送到模拟器。

在系统终端上,打开模拟器,我使用“adb remount”使文件系统可写,然后使用“adb push”来推送文件,但是我收到“无法复制:目录不为空”错误。如果我尝试使用“adb install”,我会得到这个:

    1159 KB/s (5598893 bytes in 4.714s)
    pkg: /data/local/tmp/Launcher2.apk
    Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

我不确定错误是什么,但我担心唯一的解决方案可能是从源代码重新编译Android,这可能对我想做的事情有点过分。

我试图将壁纸插入系统本身的唯一原因是因为看起来默认壁纸和用户壁纸的处理方式不同。我有一个非常简单的天空壁纸,底部有云;它主要是蓝色渐变,顶部为深蓝色,底部为浅蓝色。默认壁纸设置中的一个非常相似的图像显示得很好但是当我尝试将我的图像设置为壁纸时,我得到明显的色带,而默认图像则没有。

我尝试从APK中拉出默认壁纸,然后将其作为DCIM文件夹中的常规图片推送到模拟器,当我将其设置为用户定义的壁纸时,我注意到它显示不像我好像从默认设置中选择它:你必须像其他任何图像一样裁剪它,但是当选择整个图像时,我意识到默认壁纸实际上被裁剪,但没有设置壁纸时的默认选择。也就是说,在选择默认壁纸时,显示的内容实际上小于将相同图像放入SD卡并将其选为手动壁纸时所显示的内容。

我只是想了解Android如何使用壁纸,看看我是否只是对图像做错了,或者它是Android的实际问题,需要以某种方式“欺骗”。原始图像为800x480 JPG,按比例重新缩放,并使用GIMP裁剪为480x320(它适用于具有240x320屏幕的设备)。在我的计算机上,图像显示正常。

original image 原始图片

resized image 调整大小的图像

Wallpaper from the default set 我用于比较的默认设置壁纸

请注意,默认设置中的壁纸为640x480。将我的图像重新缩放到640x480也不起作用。

我知道这实际上是两个问题,而不仅仅是一个问题,但我不确定解释问题的最佳方法。谢谢你的理解。

1 个答案:

答案 0 :(得分:3)

在AOSP(Gingerbread及更早版本)上,Launcher中包含的壁纸(作为apk中的资源)与用户可以从SD卡中的文件设置的壁纸(通常通过相机/图库)之间产生的质量差异应用程序)实际上是因为SD卡中的那些在进行库存CropImage活动时会稍微下采样,该活动根据getWallpaperDesiredMinimumWidth()和{{1}返回的值将图像限制为特定的输出分辨率API调用。

Launcher中包含的内容直接使用getWallpaperDesiredMinimumHeight()调用设置,从资源传入完整大小的位图文件,而在CropImage情况下,它们通过WallpaperManager.setResource()设置,传入下采样的内存中Bitmap对象。

似乎如果您在从SD卡中选择文件(而不是延迟到CropImage)后使用(或自行编写)使用WallpaperManager.setBitmap() API的应用程序,您应该获得相同的壁纸质量结果与发射器中的结果一样。

请注意,在ICS上,CropImage活动已经过修改以使用BitmapRegionDecoder(以及其他内容),因此上一个限制可能不再适用。