gpt4 book ai didi

android - 如何获取安卓锁屏壁纸?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:52:53 28 4
gpt4 key购买 nike

我使用下面的代码在 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_LOCKpfd一直为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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com