安卓 - 如何设置壁纸图片

27

如何通过编程设置安卓壁纸图片?我希望创建一个服务,可以定期从网络上下载图片并更新主屏幕壁纸。


点击此链接,我在那里写了示例代码。 - Maidul
4个回答

32

如果您有图像URL,则使用

WallpaperManager wpm = WallpaperManager.getInstance(context);
InputStream ins = new URL("absolute/path/of/image").openStream();
wpm.setStream(ins);

如果您有图像URI,请使用

WallpaperManager wpm = WallpaperManager.getInstance(context);
wpm.setResource(Uri.of.image);

在你的清单文件中:

<uses-permission android:name="android.permission.SET_WALLPAPER"></uses-permission>

我尝试了同样的方法来处理视频流,但是出现了“SkImageDecoder::Factory returned null”错误,请问有什么建议吗? - CoDe
在应用程序中是否可以将动态壁纸设置为默认壁纸? - CoDe
这必须是一个新的问题.. 无论如何,你所说的默认壁纸是什么意思? - Kishore
谢谢你的许可。我忘记了它。 - Thiago

22

以下内容摘自开发者网站上的此页面:

public void setStream (InputStream data)
更改当前系统壁纸为特定字节流。给定的输入流将被复制到持久存储中,并将用作壁纸。目前必须是JPEG或PNG图像。

8
请注意,API首次出现在2.0版本中;如果您想支持旧版本,请使用Context上的原始API之一:http://developer.android.com/reference/android/content/Context.html#setWallpaper(java.io.InputStream) - hackbod
我尝试了同样的方法来处理视频流,但是它不起作用...对于图像URL,它可以正常工作...这里有什么想法/建议吗? - CoDe

5
如果您有图像的位图,则可以添加此功能将其设置为壁纸:
  public void SetBackground(int Url) {

    try {
        File file = new File("/sdcard/sampleimage");
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), Url);
        bitmap.compress(CompressFormat.JPEG, 80, new FileOutputStream(file));
        Context context = this.getBaseContext();
        context.setWallpaper(bitmap);            
        Toast.makeText(getApplicationContext(), "Wallpaper has been set",             Toast.LENGTH_SHORT).show();            
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }         
}

你应该为此添加权限。
<uses-permission android:name="android.permission.SET_WALLPAPER"></uses-permission>

希望它能够正常工作。


4

在 API 2.0 之前,以下是如何操作:

需要调用 getApplicationContext.setWallpaper() 并传递位图。

该方法现已过时。有关新方法的详细信息,请参见 ChrisF 的回答。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接