- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我使用下面的代码在 android 8.1 手机上检索 android 锁屏壁纸:
WallpaperManager manager = WallpaperManager.getInstance(getActivity());
ParcelFileDescriptor pfd = manager.getWallpaperFile(WallpaperManager.FLAG_LOCK);
if (pfd == null) // pfd is always null for FLAG_LOCK, why?
return;
Bitmap lockScreenWallpaper = BitmapFactory.decodeFileDescriptor(pfd.getFileDescriptor());
// ...
我已经授予了READ_EXTERNAL_STORAGE
权限并预先设置了锁屏壁纸。
我在真机上运行demo,发现FLAG_LOCK
的pfd
一直为null,所以无法获取锁屏壁纸。请帮助解决问题,谢谢。
最佳答案
我自己找到了答案,希望能对有同样问题的人有所帮助。
getWallpaperFile 的官方文档说:如果没有为给定用户配置特定于锁的墙纸,则此方法在请求 FLAG_LOCK 时将返回 null,而不是返回系统墙纸的图像文件。
描述的很模糊,至少不够清楚,什么意思?如果你将一张照片同时设置为锁屏和主屏幕壁纸,两者共享同一个文件,那么通过调用
ParcelFileDescriptor pfd = wallpaperManager.getWallpaperFile(WallpaperManager.FLAG_LOCK);
pfd
永远为空,那么你应该这样获取锁屏壁纸:
if (pfd == null)
pfd = wallpaperManager.getWallpaperFile(WallpaperManager.FLAG_SYSTEM);
您将获得非空 pfd
。就是这种情况没有配置特定于锁的墙纸。
相反,已配置锁定专用壁纸
如果您直接将照片设置为锁屏壁纸,wallpaperManager.getWallpaperFile(WallpaperManager.FLAG_SYSTEM)
将返回一个非空值。
所以这是我用来检索锁屏壁纸的代码:
/**
* please check permission outside
* @return Bitmap or Drawable
*/
public static Object getLockScreenWallpaper(Context context)
{
WallpaperManager wallpaperManager = WallpaperManager.getInstance(context);
if (Build.VERSION.SDK_INT >= 24)
{
ParcelFileDescriptor pfd = wallpaperManager.getWallpaperFile(WallpaperManager.FLAG_LOCK);
if (pfd == null)
pfd = wallpaperManager.getWallpaperFile(WallpaperManager.FLAG_SYSTEM);
if (pfd != null)
{
final Bitmap result = BitmapFactory.decodeFileDescriptor(pfd.getFileDescriptor());
try
{
pfd.close();
}
catch (Exception e)
{
e.printStackTrace();
}
return result;
}
}
return wallpaperManager.getDrawable();
}
不要忘记在 list 文件中添加 READ_EXTERNAL_STORAGE
并将其授予外部。
关于android - 如何获取安卓锁屏壁纸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53881697/
如何从 Android-Native-Screen 打开 flutter 屏幕? 我开了一个 Android-Native-Screen 从现有我们 flutter 项目 . 所以,在 Android
有人知道如何使用 java 和 google chrome 最大化 selenium webdriver 窗口吗? 我已经尝试过一些命令,例如maximize () window (),但没有成功。
Redmi A65 智能电视今天正式开卖,4K 超高清大屏 + 立体声扬声器,到手价 2599 元。 IT之家了解到,Redmi A65 智能电视搭载了一块 65 英寸 4K 屏,支持 HDR
9 月 26 日消息小米电视大师「至尊纪念版」将在 9 月 29 日发布,根据今天小米集团大家电部总经理李肖爽放出的海报显示,小米电视大师至尊版有两款。 小米电视大师「至尊纪念版」是小米首款
华为手环 6 今日在海外正式发布,英文名 Band 6。这款产品是华为手环 4 的升级版,屏幕尺寸由 0.96 英寸升级为 1.47 英寸 AMOLED 屏,分辨率 194 x 368。该手环外形类
我是一名优秀的程序员,十分优秀!