Я создаю приложение для обоев, используя unsplash
api. Я получил изображения и отображается в приложении. У меня есть кнопка, которая показывает диалог для установки в качестве домашнего экрана (работает нормально) или обоев экрана блокировки.
Проблема возникает, когда я пытаюсь установить обои экрана блокировки, это не меняет изображение на экране блокировки. Вот мой фрагмент кода для этого:
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();
}
}
});
и установить обои экрана блокировки:
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
вот так, и это работает:
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
, или предложить мне улучшить мой код для установки обоев для экрана блокировки. Спасибо.