以编程方式设置动态壁纸

26

是否有可能使用一些代码设置动态壁纸?例如,我想告诉我的用户一个动态壁纸是可用的,"单击此处设置"。


我认为这是不可能的,你可以启动壁纸选择器,但你不能直接设置壁纸。 - theomega
那么我猜我的下一个问题是...如何使用代码启动它? - prashant
看起来可以直接设置壁纸:https://dev59.com/akvSa4cB1Zd3GeqPhMha - mahboudz
2
@mahboudz 这只适用于静态壁纸(图片),而不是动态壁纸。 - stealthcopter
2个回答

34

现在有两种方法可以实现这一点,因为Jelly Bean提供了一种直接设置动态壁纸的方式。这个样板代码将选择可用的最佳方法。

Intent i = new Intent();

if(Build.VERSION.SDK_INT > 15){
    i.setAction(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);

    String p = HypercaneWallpaperService.class.getPackage().getName();
    String c = HypercaneWallpaperService.class.getCanonicalName();        
    i.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, new ComponentName(p, c));
}
else{
    i.setAction(WallpaperManager.ACTION_LIVE_WALLPAPER_CHOOSER);
}
getActivity().startActivityForResult(i, 0);

1
如果我没有拥有那个壁纸怎么办?我的应用程序如何设置另一个壁纸?你能看一下这个吗?https://dev59.com/4WvXa4cB1Zd3GeqPK5th - Naskov
我的壁纸服务在与主要包不同的一个包中。我需要提供正确的包路径:String String p = this.getContext().getPackageName(); - Twinsen

26

好的,为了避免我的过时回答被踩,请查看下面Error 454的回答,他提供了一种更为健壮的解决方案,可以直接将用户发送到Jelly Bean及更新设备上的墙纸预览屏幕。

========================================

以下是如何启动墙纸选择器,用户可以从中选择您的壁纸。Toast只是一种向用户解释正在发生什么的方式。

Toast toast = Toast.makeText(this, "Choose '<WALLPAPER NAME>' from the list to start the Live Wallpaper.",Toast.LENGTH_LONG);
toast.show();

Intent intent = new Intent();
intent.setAction(WallpaperManager.ACTION_LIVE_WALLPAPER_CHOOSER);
startActivity(intent);

我可以在没有用户交互的情况下更改它吗?你能否检查一下这个链接?https://dev59.com/4WvXa4cB1Zd3GeqPK5th - Naskov
不可以。Error454的回答离需要root的操作已经很接近了。我不知道如何通过root来解决这个问题,或许可以在XDA论坛上询问。 - Josh

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