我刚开始学习Android编程,想知道是否有一种方法可以以编程方式设置锁屏图片。我已经在API中找到了各种设置壁纸的方法,但似乎找不到设置锁屏图片的等效方法。
我看到过一些帖子说,通过添加小部件或应用程序片段来自定义锁屏是不可能的,但肯定有一种方法可以通过编程方式设置图片?
谢谢,
罗宾
自API级别24起,他们添加了新方法(并更新了文档)和标志到WallpaperManager
,允许您将Wallpaper
设置到主屏幕和Lockscreen
。
若要将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);
我只在一些三星手机上测试过这个功能,并不能保证它将来不会出现故障。请谨慎使用。
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:布尔值:如果允许操作系统备份此壁纸图像以便在将来的设备上恢复,则为 true;否则为 false。
which:它是最重要的参数之一,可帮助您为锁屏和主屏幕壁纸配置壁纸。对于锁屏,请使用 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开发者壁纸管理器参考文档。
还有另一种方法可以实现这个功能。首先,您需要将想要设置为锁屏的图片保存在一个文件夹中(假设它叫做“应用名称”)。然后,使用以下代码打开相册,在相册打开后,引导用户打开“应用名称”文件夹,并在系统相册中选择图片。在相册中,用户可以将图片设置为壁纸或锁屏纸。
// 这段代码用于打开相册。 startActivity(new Intent(Intent.ACTION_SET_WALLPAPER));
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();
}
}
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);
}
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();
}
RemoteControlClient
,在5.0及以上版本中使用媒体Notification
。Play Music并没有“获取锁屏控制权”,而是提供要在锁屏界面显示的信息。 - CommonsWare