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

本文探讨了在应用中设置动态壁纸的过程,包括如何通过回调方式实现动态壁纸的设置,并在应用内判断设置是否成功。重点介绍了从动态壁纸预览页面回到应用时,通过检查动态壁纸是否已运行来验证设置过程的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

但是现在是要在自己的应用中进入到动态壁纸预览页面(去往某个动态壁纸的预览页面,那里可以设置壁纸)点击“设置壁纸”之后回到自己的应用是看不到桌面的,而且又不想直接退出自己的应用!此时该怎么得到想要的结果呢?

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

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

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

 

Java代码   收藏代码
  1. /** 
  2.      * 去往某个动态壁纸的预览页面,那里可以设置壁纸 
  3.      *  
  4.      * @param context 
  5.      * @param packageName 
  6.      *            动态壁纸的包名 
  7.      * @param classFullName 
  8.      *            动态壁纸service类的类全名 
  9.      */  
  10.     @SuppressLint("InlinedApi")  
  11.     public static void startLiveWallpaperPrevivew(Activity activity, String packageName, String classFullName) {  
  12.         ComponentName componentName = new ComponentName(packageName, classFullName);  
  13.         Intent intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);  
  14.         intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, componentName);  
  15.         activity.startActivityForResult(intent, Configs.REQUEST_SET_LIVE_WALLPAPER);  
  16.     }  

 回到自己应用时判断自己的动态壁纸是否正在运行

 

 

Java代码   收藏代码
  1. /** 
  2.      * 判断一个动态壁纸是否已经在运行 
  3.      *  
  4.      * @param context 
  5.      *            :上下文 
  6.      * @param tagetPackageName 
  7.      *            :要判断的动态壁纸的包名 
  8.      * @return 
  9.      */  
  10.     public static boolean isLiveWallpaperRunning(Context context, String tagetPackageName) {  
  11.         WallpaperManager wallpaperManager = WallpaperManager.getInstance(context);// 得到壁纸管理器  
  12.         WallpaperInfo wallpaperInfo = wallpaperManager.getWallpaperInfo();// 如果系统使用的壁纸是动态壁纸话则返回该动态壁纸的信息,否则会返回null  
  13.         if (wallpaperInfo != null) { // 如果是动态壁纸,则得到该动态壁纸的包名,并与想知道的动态壁纸包名做比较  
  14.             String currentLiveWallpaperPackageName = wallpaperInfo.getPackageName();  
  15.             if (currentLiveWallpaperPackageName.equals(tagetPackageName)) {  
  16.                 return true;  
  17.             }  
  18.         }  
  19.         return false;  
  20.     }  

 返回到自己应用回调判断

Java代码   收藏代码
  1. @Override  
  2.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  3.         if (requestCode == Configs.REQUEST_SET_LIVE_WALLPAPER) {  
  4.             if (isLiveWallpaperRunning(context,tagetPackageName)) {  
  5.                 //do something  
  6.             }  
  7.         }  
  8.         super.onActivityResult(requestCode, resultCode, data);  
  9.     }  

 

转帖:http://flycatdeng.iteye.com/blog/2104483

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值