参考资料
api讲解
wallpaper.setWallpaper
setWallpaper(source: string | image.PixelMap, wallpaperType: WallpaperType): Promise
将指定资源设置为指定类型的壁纸。
需要权限:ohos.permission.SET_WALLPAPER
系统能力: SystemCapability.MiscServices.Wallpaper
参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
source | string |PixelMap | 是 | JPEG或PNG文件的Uri路径,或者PNG格式文件的位图。 |
wallpaperType | WallpaperType | 是 | 壁纸类型。 |
返回值:
类型 | 说明 |
---|---|
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));
});
![](/i/l/?n=22&i=blog/1969374/202208/1969374-20220816101339703-1930724809.gif)
代码实现
-
准备工作
准备一张图片放在rawfile文件目录,如下图所示
-
申请权限
在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%') } }
运行效果
欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh
标签:wallpaper,桌面壁纸,permission,ohos,setWallpaper,HarmonyOS,error,import,ARKUI From: https://www.cnblogs.com/developer-huawei/p/16590687.html