• 周四. 4 月 23rd, 2026

物嫩软件资讯网

软件资讯来物嫩

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

admin@wunen

4 月 26, 2025

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

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

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

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

在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

发表回复

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