【问题标题】:How to set android lock screen image如何设置安卓锁屏图片
【发布时间】:2011-02-08 21:12:53
【问题描述】:

我刚开始使用 android 编程,想看看是否有办法以编程方式设置锁屏图像。我在 API 中找到了各种设置壁纸的方法,但似乎找不到设置锁屏图像的等效方法。

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

干杯,

罗宾

【问题讨论】:

    标签: java android image wallpaper


    【解决方案1】:

    从 API 级别 24 开始,他们添加了新方法(并更新了 documentation)和 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获取当前设置的壁纸

    查看更新后的documentation 以获取WallpaperManager

    【讨论】:

      【解决方案2】:

      Android 中没有“锁屏图像”。在现有的 Android、HTC Sense、MOTOBLUR 等之间肯定没有相同的“锁定屏幕图像”概念。这根本不是 Android SDK 的一部分。

      Rijk 先生指出的项目是伪装成锁屏替换的安全违规行为。

      【讨论】:

      • 我对这个答案投了反对票,因为现在有一个专门执行此操作的应用程序。结帐,缪斯seemuse.com/home.html
      • @uptownhr 如果可以的话,我会否决您的评论。 Muse 是一款锁屏替换应用。它不设置锁屏背景。它设置自己的自己的背景,因为它成为锁屏。
      • 这个答案仍然成立吗?播放音乐时,Google Play 音乐之类的应用如何控制锁定屏幕?
      • @McAdam331: RemoteControlClient 在 Android 4.x 上,一个媒体 Notification 在 5.0+ 上。 Play Music 不会“控制锁屏”; Play Music 提供要在锁定屏幕上显示的信息。
      • Android Nougat 改变了锁屏的工作方式,现在您可以在获取或设置指定锁屏壁纸或系统壁纸的壁纸时传递一个标志。在这里查看我的答案:stackoverflow.com/a/38684673/3311560
      【解决方案3】:

      有一种方法可以在三星设备上执行此操作。在意图中,您可以添加额外的内容。

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

      我只在部分三星手机上对此进行了测试,不能保证在未来一段时间内不会中断。谨慎使用。

      【讨论】:

      • 哦,意图是什么意思?
      • 请给出正确的例子和完整的例子
      【解决方案4】:

      您可以使用 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;否则为假。

      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 developer wallpaper manager reference

      【讨论】:

        【解决方案5】:

        还有另一种方法可以做到这一点。首先,您需要将要在锁定屏幕中设置的图片保存在一个文件夹中(假设它被称为“appName”)。然后,使用以下代码打开画廊,画廊打开后。引导用户打开“appName”文件夹,并选择系统图库中的图片。在图库中,用户可以将图片设置为壁纸或锁屏纸。

        // 这段代码打开画廊。 startActivity(new Intent(Intent.ACTION_SET_WALLPAPER));

        【讨论】:

          【解决方案6】:
           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();
                  }
              
          

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              【解决方案8】:

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

              source

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-01-09
                相关资源
                最近更新 更多