Android 壁纸设置和确认

news/2024/11/23 4:16:41/

Android 壁纸设置和确认

文章目录

  • Android 壁纸设置和确认
    • 一、壁纸设置
      • (1)代码壁纸设置
        • 通过WallpaperManager设置
          • 设置Bitmap对象
          • 还有一种方法是设置Source对象
      • (2)adb壁纸设置
    • 二、壁纸验证
      • (1)系统应用代码中验证
      • (2)adb 复制文件验证
      • (3)apk验证,请看附件
    • 三、其他
      • (1)壁纸设置无效
      • (2)壁纸和桌面Launcher的关系
      • (3)壁纸设置的系统代码流程
      • (4)系统默认壁纸设置失败?
  • 共勉:人生短短,不可苟活。

android wallpaper包括锁屏壁纸和桌面壁纸,壁纸又区分静态和动态两种。
本文只介绍静态壁纸设置和确认。

首先说一下,Android手机壁纸Wallpaper和桌面Launcher是分开的,是两个不同的应用,
Wallpaper在系统Framework也有相关Manager和Service;
Android Launcher默认背景是透明的,覆盖在壁纸之上,
简单的理解就是Launcher就是一个显示了很多应用图标的apk。

Android壁纸设置后会存路径:

/data/system/users/0/wallpaper

这个wallpaper是一个文件,可以pull到电脑中添加后缀.png查看图片。

一、壁纸设置

(1)代码壁纸设置

AndroidManifest.xml中需要申明权限:

<uses-permission android:name = "android.permission.SET_WALLPAPER"/>

通过WallpaperManager设置

该方法可以直接将图片置为壁纸,对于所有平台的Android系统都使用。

设置Bitmap对象

try {WallpaperManager wpm = (WallpaperManager) getActivity().getSystemService(Context.WALLPAPER_SERVICE);if (wpm != null) {Bitmap mBitmap = BitmapFactory.decodeFile(path); //path为绝对路径//第一个参数是Bitmap对象,第二个参数是截取图片的大小矩形,第三个参数是是否备份wpm.setBitmap(mBitmap, new Rect(0, 0, right, bottom), true); Log.i("liwenzhi", "wallpaper not null");}
} catch (IOException e) {Log.e(TAG, "Failed to set wallpaper: " + e);
}

Android 10及以后的版本要注意,普通应用连sdcard文件读取的权限都没有,因为加了沙箱机制了。

不过也是有方法解决的,1是添加系统签名android.uid.system,2是添加WRITE_MEDIA_STORAGE权限

    <uses-permission android:name = "android.permission.SET_WALLPAPER"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>//Android10及以后的版本,需要额外添加的权限<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE"tools:ignore="ProtectedPermissions" />
还有一种方法是设置Source对象

指的是应用内部的图片文件,比如raw目录或者drawable目录,的文件
并且只支持PNG or JPEG格式的图片。


try {WallpaperManager wpm = WallpaperManager.getInstance(context);//同getActivity().getSystemService(Context.WALLPAPER_SERVICE);wpm.setResource(getResources().getIdentifier(name, "drawable", context.getPackageName()));
} catch (IOException e) {Log.e("TAG","error = " + e.getMessage());
}

该方式不需要读取权限,只要SET_WALLPAPER权限即可。

(2)adb壁纸设置

需要root权限!而且需要重启一次,才能看到效果,因为没有调用到系统刷新。

//root
adb root//拉到电脑的D盘temp目录下,电脑中看
adb push D:/temp/wallpaper.png /data/system/users/0/wallpaper //拉到sdcard根目录,手机应用中看
adb push /sdcard/wallpaper.png /data/system/users/0/wallpaper//需要重启才能生效
adb root

二、壁纸验证

需要权限(即系统应用、root权限)!

(1)系统应用代码中验证

打开壁纸文件

//显示壁纸图片,需要系统签名public void showWallpaper(View view) {try {Bitmap bitmap = BitmapFactory.decodeFile("/data/system/users/0/wallpaper");iv_wallpaper.setImageBitmap(bitmap);} catch (Exception e) {Log.e(TAG, "showWallpaper error = " + e.getMessage());tv_info.append("showWallpaper error = " + e.getMessage());}}//把壁纸pull到sdcard目录,需要系统签名public void pullWallpaperToSdcard(View view) {Log.i(TAG, "pullWallpaperToSdcard start");File fromFile = new File("/data/system/users/0/wallpaper");File toFile = new File("/sdcard/" + getTimeString() + "_wallpaper.png");copyFile(fromFile, toFile);Log.i(TAG, "pullWallpaperToSdcard end");}//获取当前时间的完整显示字符串private String getTimeString() {SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");return format.format(new Date(System.currentTimeMillis()));}//复制文件操作private void copyFile(File fromFile, File toFile) {try {if (!toFile.getParentFile().exists()) {toFile.getParentFile().mkdirs();}java.io.FileInputStream fosfrom = new java.io.FileInputStream(fromFile);java.io.FileOutputStream fosto = new FileOutputStream(toFile);byte bt[] = new byte[1024];int c;while ((c = fosfrom.read(bt)) > 0) {fosto.write(bt, 0, c); //将内容写到新文件当中}fosfrom.close();fosto.close();} catch (Exception e) {Log.e(TAG, e.getMessage());tv_info.append("copyFile error = " + e.getMessage());}}

(2)adb 复制文件验证


//root权限
adb root//拉到电脑的D盘temp目录下,电脑中看
adb pull /data/system/users/0/wallpaper D:/temp/wallpaper.png//拉到sdcard根目录,手机应用中看
adb pull /data/system/users/0/wallpaper D:/temp/wallpaper.png

(3)apk验证,请看附件

这个wallpaper.apk只能替换壁纸,
若要显示和pull文件需要签名文件,替换项目中的签名文件即可。

简单的设置壁纸验证壁纸的apk资源:
https://download.csdn.net/download/wenzhi20102321/82630130

三、其他

(1)壁纸设置无效

和Launcher相关,Launcher界面是覆盖在壁纸之上的。

(2)壁纸和桌面Launcher的关系

没啥关系。但是Launcher可以覆盖壁纸。

壁纸是与系统服务,以及SystemUi相关的。

你把/data/system/users/0/wallpaper文件删除,会发现,壁纸背景是黑色的。

(3)壁纸设置的系统代码流程

有兴趣的看: https://blog.csdn.net/lj527409/article/details/79825015

(4)系统默认壁纸设置失败?


默认壁纸路径:frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.png

要注意res同一个目录下有多个drawable文件夹,有的里面也有default_wallpaper.png图片。

如果是替换了drawable里面多个default_wallpaper.png图片没用反应,
那么要看看系统源码哪里出错了,多加一些打印看看进行具体情况分析,
里面是有读取default_wallpaper.png图片的代码逻辑,比如关键字:R.drawable.default_wallpaper。

共勉:人生短短,不可苟活。


http://www.ppmy.cn/news/323323.html

相关文章

黑色壁纸 simile_使用SIMILE时间线库将时间线添加到DasBlog

黑色壁纸 simile Ive been exploring recently the amazing Timeline Javascript library from the SIMILE folks over at MIT. 最近&#xff0c;我一直在MIT的SIMILE团队中探索令人惊叹的Timeline Javascript库。 What a joy to work with! Ive not historically been a fan,…

机柜卖出“奔驰”价

近日&#xff0c;台达电子集团子公司中达电通推出面向下一代数据中心的高性能服务器机柜&#xff0c;迈出了进军数据中心市场的第一步。台达服务器机柜定位于高端市场&#xff0c;采用大量人性化设计&#xff0c;是台达数据中心整体解决方案的重要组成部分。“2009年&#xff0…

css

供应默勒接触器 FAZ-B10/1FAZ-B13/2FAZ-B16/1FAZ-B16/2FAZ-B6/1FAZ-C0,5/1FAZ-C1/1FAZ-C10/1FAZ-C10/2FAZ-C10/3FAZ-C16/1FAZ-C16/2FAZ-C16/3FAZ-C2/1FAZ-C20/1FAZ-C25/1FAZ-C3/1FAZ-C32/1FAZ-C4/1FAZ-C40/3FAZ-C6/1FAZ-D10/1FAZ-D16/1FAZ-D20/2FAZ-D4/1FAZ-D6/1FAZ/FIP-XHI11…

大数据多维变身成贵州经济新引擎

2017中国国际大数据产业博览会近日在贵阳落幕&#xff0c;大数据成为提升全要素生产率和决定未来现代化水平关键要素的前景已日益凸显&#xff0c;贵州省近年来以大数据作为数字经济突破口&#xff0c;把发展数字经济作为实施大数据战略行动、建设国家大数据综合试验区的重要方…

springboot+vue.js学生宿舍报修信息管理系统68ozj

本学生宿舍信息管理系统管理员&#xff0c;学生&#xff0c;维修人员&#xff0c;商家四个角色。管理员功能有个人中心&#xff0c;班级管理&#xff0c;学生管理&#xff0c;维修人员管理&#xff0c;商家管理&#xff0c;宿舍信息管理&#xff0c;宿舍安排管理&#xff0c;报…

希沃管家锁屏破解update1.1

更新了认证系统&#xff08;就是class.bin那行&#xff0c;里边内容是1&#xff5b;string类&#xff5d;就行&#xff09;&#xff0c;然后减少了解锁所需的时间 目前还没解决自动运行的方案 代码一会发

希沃白板-皇冠

支持下载所有的课件模板 授课界面完全干净清爽

计算机硬件希沃课件,希沃白板的课件能转换成ppt吗?如何转换?

希沃白板作为一款优秀的课件制作软件&#xff0c;能够为你制作专属于自己的课件内容&#xff0c;对于希沃白板很多人还不太了解&#xff0c;希沃白板的课件能转换成ppt吗&#xff1f;很多用户不知道如何将课件转化为PPT文件&#xff0c;想知道的赶快来看看下面的教程吧! 操作步…