【ARKUI】HarmonyOS 如何设置桌面壁纸

2022-09-07 13:38:51

 参考资料

壁纸

Context模块

api讲解

wallpaper.setWallpaper

setWallpaper(source: string | image.PixelMap, wallpaperType: WallpaperType): Promise

将指定资源设置为指定类型的壁纸。

需要权限:ohos.permission.SET_WALLPAPER

系统能力: SystemCapability.MiscServices.Wallpaper

参数:

参数名类型必填说明
sourcestring |PixelMapJPEG或PNG文件的Uri路径,或者PNG格式文件的位图。
wallpaperTypeWallpaperType壁纸类型。

返回值:

类型说明
Promise调用成功则返回是返回设置的结果,调用失败则返回error信息。

示例:

// source类型为string
let wallpaperPath = "/data/data/ohos.acts.aafwk.plrdtest.form/files/Cup_ic.jpg";
wallpaper.setWallpaper(wallpaperPath, wallpaper.WallpaperType.WALLPAPER_SYSTEM).then((data) => {
    console.log(`success to setWallpaper.`);
}).catch((error) => {
    console.error(`failed to setWallpaper because: ` + JSON.stringify(error));
});

代码实现

  • 准备工作

    准备一张图片放在rawfile文件目录,如下图所示

    cke_1280.png

    cke_2464.png

  • 申请权限

    在config.json注册如下权限代码如下

    "reqPermissions": [
      {
        "name": "ohos.permission.READ_USER_STORAGE"
      },
      {
        "name": "ohos.permission.WRITE_USER_STORAGE"
      },
      {
        "name": "ohos.permission.SET_WALLPAPER"
      }
    ],

    在mainAbility注册申请权限,并把权限写入指定文件夹目录下,代码如下

    package com.newdemo.myapplication;
    
    import ohos.aafwk.content.Operation;
    import ohos.ace.ability.AceAbility;
    import ohos.aafwk.content.Intent;
    import ohos.global.resource.RawFileEntry;
    import ohos.global.resource.Resource;
    import ohos.security.SystemPermission;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class MainAbility extends AceAbility {
        @Override
        public void onStart(Intent intent) {
            String[] permissions = {
                    "ohos.permission.WRITE_USER_STORAGE",
                    "ohos.permission.READ_USER_STORAGE",
                    " ohos.permission.SET_WALLPAPER"
            };
            requestPermissionsFromUser(permissions, 0);
            super.onStart(intent);
    
    
    
            writeToDisk( "entry/resources/rawfile/result.png","/result.png");
        }
    
        private void writeToDisk(String rawFilePath, String resultpath) {
            String externalFilePath = getFilesDir() +resultpath ;
            File file = new File(externalFilePath);
            if (file.exists()) {
                return;
            }
            RawFileEntry rawFileEntry = getResourceManager().getRawFileEntry(rawFilePath);
            try (FileOutputStream outputStream = new FileOutputStream(new File(externalFilePath))) {
                Resource resource = rawFileEntry.openRawFile();
                // cache length
                byte[] cache = new byte[1024];
                int len = resource.read(cache);
                while (len != -1) {
                    outputStream.write(cache, 0, len);
                    len = resource.read(cache);
                }
            } catch (IOException exception) {
            }
        }
    
    }
  • Ets语言实现

    在Ets绘画一个text文本内容为:设置壁纸,然后实现点击功能,代码如下

    import image from '@ohos.multimedia.image'
    import wallpaper from '@ohos.wallpaper';
    import featureAbility from '@ohos.ability.featureAbility'
    @Entry
    @Component
    struct Mypage {
      public onclick() {
    
        var context = featureAbility.getContext();
        context.getFilesDir((err, data) => {
          if (err) {
            console.error('Operation failed. Cause: ' + JSON.stringify(err));
            return;
          }
          let wallpaperPath =data+"/result.png";
          wallpaper.setWallpaper(wallpaperPath, wallpaper.WallpaperType.WALLPAPER_SYSTEM, (error, data) => {
            if (error) {
              console.error(`failed to setWallpaper because: ` + JSON.stringify(error));
              return;
            }
            console.log(`success to setWallpaper.`);
          });
        });
      }
    
      build() {
        Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
          Text('设置壁纸')
            .fontSize(50)
            .fontWeight(FontWeight.Bold)
            .onClick(this.onclick.bind(this))
        }
        .width('100%')
        .height('100%')
      }
    }

运行效果

fe01f050f7cf8e0d3fb3b077649e1b09_416x949.gif%40900-0-90-f.gif

 欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh

  • 作者:华为开发者论坛
  • 原文链接:https://hwdevelopers.blog.csdn.net/article/details/126359844
    更新时间:2022-09-07 13:38:51