我刚开始使用android编程,想看看是否有办法以编程方式设置锁屏图像。我在 API 中找到了各种设置壁纸的方法,但似乎找不到设置锁屏图像的等效方法。
我看过各种帖子说通过添加小部件或应用程序位来自定义锁定屏幕是不可能的,但肯定有一种方法可以以编程方式设置图像吗?
干杯,
罗宾
从 API 级别 24 开始,他们添加了新方法(并更新了文档)和标志WallpaperManager
,允许您Wallpaper
不仅将 a 设置到主屏幕,还可以设置到Lockscreen
要将 a 设置Wallpaper
为Lockscreen
使用新标志WallpaperManager.FLAG_LOCK,以及采用的方法之一int which
WallpaperManager.getInstance(this).setStream(inputStream, null, true, WallpaperManager.FLAG_LOCK);
您也可以使用以下方法之一
int setStream (InputStream bitmapData, Rect visibleCropHint, boolean allowBackup, int which)
int setResource (int resid, int which)
int setBitmap (Bitmap fullImage, Rect visibleCropHint, boolean allowBackup, int which)
一个不错的补充是,您现在还可以检查是否允许通过 设置壁纸isSetWallpaperAllowed
,并通过 获取当前设置的壁纸getWallpaperFile
查看. _ _WallpaperManager
Android中没有“锁屏图像”。在现有的 Android、HTC Sense、MOTOBLUR 等之间肯定没有相同的“锁定屏幕图像”概念。这根本不是 Android SDK 的一部分。
Rijk 先生指出的项目是一个伪装成锁屏更换的安全违规行为。
有一种方法可以在三星设备上做到这一点。在意图中,您可以添加额外的内容。
intent.putExtra("SET_LOCKSCREEN_WALLPAPER", true);
startActivity(intent);
我只在一些三星手机上对此进行了测试,并且不能保证这在未来一段时间内不会中断。谨慎使用。
您可以使用 WalpaperManager 类的这三种方法,但它仅适用于无版本设备或更高版本:-
public int setBitmap (Bitmap fullImage,
Rect visibleCropHint,
boolean allowBackup,
int which)
public int setResource (int resid,
int which)
public int setStream (InputStream inputStreamData,
Rect visibleCropHint,
boolean allowBackup,
int which)
这三种方法的参数:-
Bitmap/resid/inputStreamData :-这个参数接受数据
visibleCropHint:-该参数接受Rect对象,主要用于裁剪功能,更多信息参考Android开发者参考网站,如果你不想要裁剪功能也可以传递null
allowBackup:-boolean: 如果允许操作系统备份此壁纸图像以恢复到未来的设备,则为 true;否则为假。
其中:-它是帮助您配置锁屏壁纸和家庭壁纸的最重要参数之一。锁屏使用 WalpaperManager.FLAG_LOCK 和家庭壁纸使用 FLAG_SYSTEM
我举一个例子让你了解如何使用它:-
WalaperManager wm = WalaperManager.getInstance();
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
wm.setBitmap(bitmap,null,true,WalpaperManager.FLAG_LOCK);//For Lock screen
Toast.makeText(context.context, "done", Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(context.context, "Lock screen walpaper not supported",
Toast.LENGTH_SHORT).show();
}
} catch (e: Exception) {
Toast.makeText(context.context, e.message, Toast.LENGTH_SHORT).show();
}
有关更多信息,请访问Android 开发者壁纸管理器参考
api30+ 的用法
public void onWallpaperChanged(Bitmap bitmap, boolean onHomeScreen, boolean onLockScreen) {
WallpaperManager myWallpaperManager = WallpaperManager.getInstance(getApplicationContext());
try {
if(onHomeScreen) {
myWallpaperManager.setBitmap(bitmap);// For Home screen
}
if(onLockScreen) {
myWallpaperManager.setBitmap(bitmap,null,true, WallpaperManager.FLAG_LOCK);//For Lock screen
}
} catch (IOException e) {
e.printStackTrace();
}
}
Bitmap icon = BitmapFactory.decodeResource(getViewContext().getResources(), R.drawable.wall);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
WallpaperManager wallpaperManager = WallpaperManager.getInstance(getViewContext());
try {
wallpaperManager.setBitmap(icon, null, true, WallpaperManager.FLAG_LOCK);
} catch (IOException e) {
e.printStackTrace();
}
还有另一种方法可以做到这一点。首先,您需要将要在锁定屏幕中设置的图片保存在一个文件夹中(假设它被称为“appName”)。然后,使用以下代码打开画廊,画廊打开后。引导用户打开“appName”文件夹,并选择系统图库中的图片。在图库中,用户可以将图片设置为壁纸或锁屏纸。
//这段代码打开画廊。startActivity(new Intent(Intent.ACTION_SET_WALLPAPER));
从API 级别 24开始,您可以将壁纸设置为主屏幕、锁定屏幕或两者:
WallpaperManager wallpaperManager = WallpaperManager.getInstance(getApplicationContext());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
// home screen
wallpaperManager.setBitmap(mBitmap, null, true, WallpaperManager.FLAG_SYSTEM);
// lock screen
wallpaperManager.setBitmap(mBitmap, null, true, WallpaperManager.FLAG_LOCK);
// home screen & lock screen
wallpaperManager.setBitmap(mBitmap, null, true, WallpaperManager.FLAG_LOCK | WallpaperManager.FLAG_SYSTEM);
} else {
wallpaperManager.setBitmap(mBitmap);
}