首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式设置LockScreen墙纸

以编程方式设置LockScreen墙纸
EN

Stack Overflow用户
提问于 2018-06-25 04:08:36
回答 1查看 3K关注 0票数 1

我正在使用unsplash api构建一个壁纸应用程序。我已经获取了图像并显示在应用程序中。我有一个按钮,显示一个对话框设置为主屏幕(工作良好)或锁定屏幕壁纸。

这里的问题发生在我试图设置锁屏壁纸时,它不会改变锁定屏幕上的图像。下面是我的代码片段:

代码语言:javascript
复制
setBtn.setOnClickListener(new View.OnClickListener() {
        @TargetApi(Build.VERSION_CODES.N)
        @Override
        public void onClick(View view) {
            if (validate()) {
                if (homeCheckBox.isChecked() && largeURL != null) {
                    setHomeWallpaper(largeURL);
                    getDialog().dismiss();
                }

                if (lockCheckBox.isChecked() && largeURL != null) {
                    setLockWallpaper(largeURL);
                    getDialog().dismiss();
                }

            } else {
                Toast.makeText(getContext(), "Select an Option", Toast.LENGTH_SHORT).show();
            }
        }
    });

并设置锁屏壁纸:

代码语言:javascript
复制
private void setLockWallpaper(final String largeURL) {
    final WallpaperManager wpm = WallpaperManager.getInstance(getActivity());
    if (Build.VERSION.SDK_INT >= 24){
        if (wpm.isSetWallpaperAllowed()) {
            Log.d(TAG, "Lock Screen Wallpapers Supported");
            makeLockWallpaper(wpm, largeURL);
            getDialog().dismiss();
        } else {
            Toast.makeText(getActivity(), "Your Device Does Not Support Lock Screen Wallpapers", Toast.LENGTH_SHORT).show();
        }
    } else {
        makeLockWallpaper(wpm, largeURL);
        getDialog().dismiss();
    }
}

private void makeLockWallpaper(final WallpaperManager wpm, final String largeURL) {
    new Thread(new Runnable() {
        @TargetApi(Build.VERSION_CODES.N)
        @Override
        public void run() {
            URL url = null;
            try {
                url = new URL(largeURL);
                Bitmap bitmap = BitmapFactory.decodeStream(url.openConnection().getInputStream());
                InputStream stream = Utils.bitmapToStream(bitmap);

                // set wp
                wpm.setStream(stream, null, true, WallpaperManager.FLAG_LOCK);
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });
}

为了设置主屏幕壁纸,我像这样使用了Picasso,它的工作原理是:

代码语言:javascript
复制
private void setHomeWallpaper(String largeURL) {
    final WallpaperManager wpm = WallpaperManager.getInstance(getActivity());
    Picasso.with(getActivity())
            .load(largeURL)
            .into(new Target() {
                @Override
                public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                    try {
                        wpm.setBitmap(bitmap);
                        Toast.makeText(getActivity(), "Your New Wallpaper Has Been Set", Toast.LENGTH_SHORT).show();
                        getDialog().dismiss();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

                @Override
                public void onBitmapFailed(Drawable errorDrawable) {
                    Log.d(TAG, "Bitmap Load Failed");
                    Toast.makeText(getActivity(), "Could Not Set Wallpaper...Choose Another", Toast.LENGTH_SHORT).show();
                    getDialog().dismiss();
                }

                @Override
                public void onPrepareLoad(Drawable placeHolderDrawable) {
                    Log.d(TAG, "Prep to Load Bitmap");
                }
            });
}

但是由于锁定屏幕的标志,我必须使用任何一个setStream or setResource。有没有人知道毕加索是否能解决这个问题,至少我知道图像是否已经准备好,是否是Picasso callbacks造成的,或者建议我改进我的代码设置锁屏壁纸。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-06-13 11:52:19

您可以使用WallpaperManager设置锁屏幕和主屏幕上的墙纸。

在锁屏上设置壁纸:

代码语言:javascript
复制
  WallpaperManager.getInstance(this)
                    .setBitmap(bitmap, null, true, WallpaperManager.FLAG_LOCK)

在HomeScreen:上设置壁纸

代码语言:javascript
复制
        WallpaperManager.getInstance(this)
                .setBitmap(bitmap, null, true, WallpaperManager.FLAG_SYSTEM)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51016173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档