如何设置安卓手机锁屏壁纸

36

我刚开始学习Android编程,想知道是否有一种方法可以以编程方式设置锁屏图片。我已经在API中找到了各种设置壁纸的方法,但似乎找不到设置锁屏图片的等效方法。

我看到过一些帖子说,通过添加小部件或应用程序片段来自定义锁屏是不可能的,但肯定有一种方法可以通过编程方式设置图片?

谢谢,

罗宾

8个回答

43

自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 的文档。


16

Android 中没有"锁屏图片"的概念。在原生 Android、HTC Sense、MOTOBLUR 等系统中,绝对没有相同的"锁屏图片"概念。这不是 Android SDK 的一部分。

Rijk 先生指向的项目是一个安全漏洞,其冒充了一个锁屏替换程序。


3
我因为现在有一个专门做这件事的应用程序,而对这个回答进行了负评。请查看muse:http://seemuse.com/home.html - uptownhr
4
如果可以的话,我会给你的评论点踩。Muse是一个锁屏替换应用程序,它并不是设置锁屏背景,而是把自己作为锁屏应用程序,并设置自己的背景。请注意,这里的背景是指锁屏界面的背景。 - copolii
4
这个答案仍然正确吗?像Google Play音乐这样的应用程序在播放音乐时如何控制锁定屏幕? - AdamMc331
4
在Android 4.x上使用RemoteControlClient,在5.0及以上版本中使用媒体Notification。Play Music并没有“获取锁屏控制权”,而是提供要在锁屏界面显示的信息。 - CommonsWare
@CommonsWare 对不起我使用了错误的术语,我明白你的意思。感谢您澄清! - AdamMc331
1
Android Nougat已经改变了锁屏的工作方式,现在你可以在获取或设置壁纸时传递一个标志,指定锁屏壁纸或系统壁纸。在这里查看我的答案: http://stackoverflow.com/a/38684673/3311560。 - codewiz

3

在三星设备上有一种方法。在意图中,您可以添加一个额外的参数。

intent.putExtra("SET_LOCKSCREEN_WALLPAPER", true);
startActivity(intent);

我只在一些三星手机上测试过这个功能,并不能保证它将来不会出现故障。请谨慎使用。


好的,"intent" 是什么意思? - Bipin Bharti
请提供恰当的示例和完整的例子。请注意,这是程序相关的内容,请遵循专业术语进行翻译。 - Bipin Bharti

1
你可以使用WalpaperManager类的这三种方法,但只适用于Android 7.0版本及以上的设备:
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开发者壁纸管理器参考文档


0

还有另一种方法可以实现这个功能。首先,您需要将想要设置为锁屏的图片保存在一个文件夹中(假设它叫做“应用名称”)。然后,使用以下代码打开相册,在相册打开后,引导用户打开“应用名称”文件夹,并在系统相册中选择图片。在相册中,用户可以将图片设置为壁纸或锁屏纸。

// 这段代码用于打开相册。 startActivity(new Intent(Intent.ACTION_SET_WALLPAPER));


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();
        }
    }

0
自从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);
}

来源


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();
        }
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接