我刚刚开始使用android编程,并想看看是否有办法以编程方式设置锁屏图像。我已经找到了在API中设置壁纸的各种方法,但我似乎无法找到设置锁定屏幕图像的等效方法。
我看过各种帖子说通过添加小部件或应用程序来自定义锁定屏幕是不可能的,但肯定有办法以编程方式设置图像吗?
干杯,
罗宾
答案 0 :(得分:37)
从API级别24开始,他们为WallpaperManager
添加了新方法(并更新了documentation)和标记,这样您就不仅可以将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
的更新documentation。
答案 1 :(得分:13)
Android中没有“锁定屏幕图像”。肯定没有“锁屏图像”概念在Android,HTC Sense,MOTOBLUR等股票之间是相同的。这根本不是Android SDK的一部分。
Rijk先生指出的项目违反安全规定,假装是更换锁屏。
答案 2 :(得分:3)
有一种方法可以在三星设备上进行。在意图中你可以多加一点。
intent.putExtra("SET_LOCKSCREEN_WALLPAPER", true);
startActivity(intent);
我只是在一些三星手机上测试了这个,并且不能保证这将在未来的某个时间打破。请谨慎使用。
答案 3 :(得分:1)
您可以使用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 developer reference website,如果您不希望裁剪功能,也可以传递null
allowBackup:-boolean:如果允许操作系统备份此墙纸图像以还原到将来的设备,则为true;否则为false。否则为假。
其中:-这是最重要的参数之一,可帮助您为锁屏和家庭墙纸配置墙纸。对于锁定屏幕,请使用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();
}
答案 4 :(得分:0)
还有另一种方法可以做到这一点。首先,你需要保存你想在一个文件夹中的lockedscreen中设置的图片(假设它被称为“appName”)。然后,在图库打开后使用以下代码打开图库。用户打开“appName”文件夹,并选择系统库中的图片。在图库中,用户可以将图片设置为壁纸或锁屏纸。
//此代码可以打开图库。 startActivity(new Intent(Intent.ACTION_SET_WALLPAPER));
答案 5 :(得分:0)
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();
}
答案 6 :(得分:0)
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();
}
}