• 周五. 4 月 24th, 2026

物嫩软件资讯网

软件资讯来物嫩

判断动态壁纸预览页面的壁纸是否设…

admin@wunen

6 月 9, 2025

//动态壁纸真的很伤脑筋,居然是系统的权限,so………下面是辛辛苦苦找的代码啊

本来从动态壁纸预览页面设置一个动态壁纸回到桌面便可以看到桌面动态壁纸,可以观察得到自己的动态壁纸是否设置成功了(必须知道设置是否成功的结构,因为还有一些操作需要完成)!

但是现在是要在自己的应用中进入到动态壁纸预览页面(

去往某个动态壁纸的预览页面,那里可以设置壁纸

)点击“设置壁纸”之后回到自己的应用是看不到桌面的,而且又不想直接退出自己的应用!此时该怎么得到想要的结果呢?

在LiveWallpaperPreview的setLiveWallpaper方法中有一个setResult(RESULT_OK);也就是说可以回调得到结果,所以很兴奋的尝试了一把,结果发现设置动态壁纸成功后得到的resultCode=0.这是为什么呢?经过大神指点发现,正常的路径从动态壁纸列表进入的某动态壁纸预览页面是通过类的调用,也就是同一个进程,所以回调是有效的。但是我这个从应用进入到预览页面是通过广播进入的,是跨进程的,所以是无法得到该返回码的!而预览页面也没提供该结果的接口,所以这条路是行不通的!

解决:从预览页面回到自己应用有两种可能,一种是在预览页面直接按返回键,这种情况是没有设置自己特有的动态壁纸的,而另一种是点击了“设置壁纸”再回到自己应用的,这个时候系统已经将动态壁纸设置为自己特有的动态壁纸了,所以此时自己的动态壁纸已经在运行了。所以我只要从预览页面回到自己应用判断自己的动态壁纸是否已经运行了就可以知道设置壁纸是否成功了!(

判断一个动态壁纸是否已经在运行

以回调方式去往动态壁纸预览页面





public static boolean isLiveWallpaperRunning(Context context, String tagetPackageName) {









WallpaperManager wallpaperManager = WallpaperManager.getInstance(context);// 得到壁纸管理器








WallpaperInfo wallpaperInfo = wallpaperManager.getWallpaperInfo();// 如果系统使用的壁纸是动态壁纸话则返回该动态壁纸的信息,否则会返回null








if (wallpaperInfo != null) { // 如果是动态壁纸,则得到该动态壁纸的包名,并与想知道的动态壁纸包名做比较












String currentLiveWallpaperPack

ageName = wallpaperInfo.getPackageName();












if (currentLiveWallpaperPack

ageName.equals(tagetPackageName)) {

















return true;












}








}








return false;




}

@Override




protected void onActivityResult(int requestCode, int resultCode, Intent data) {









if (requestCode == Configs.REQUEST_SET_LIVE_WALLPAPER) {













if (isLiveWallpaperRunning(context,tagetPackageName)) {

















//do something












}








}








super.onActivityResult(requestCode, resultCode, data);




}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注