Я поражен точкой в моем android приложении. Я разрабатываю приложение, в котором я использую класс обслуживания и получаю уведомление через мой класс обслуживания. Теперь есть сценарий, в котором я хочу изменить обои моего приложения моего телефона, и я успешно делаю это в своем коде, но то же самое, когда я помещаю в класс обслуживания, приложение вылетает и выдает ошибку, Пикассо должен запускаться в главном потоке. На самом деле в моем приложении есть сценарий, если я получаю уведомление, даже если мое приложение находится в фоновом режиме, тогда обои должны быть изменены. Вот мой код:
public class FirebaseMessagingServices extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
RemoteMessage.Notification notification = remoteMessage.getNotification();
if (data.isEmpty()) {
System.out.println("FCM type is Notification");
parseNotificationMessage(notification);
}
else {
System.out.println("FCM type is Data");
parseDataMessage(remoteMessage);
}
}
Здесь я изменяю получение сообщения и при получении проверяю сообщение и генерирую уведомление
private void parseDataMessage(RemoteMessage remoteMessage) {
String notification_title =remoteMessage.getData().get("title");
String notification_message = remoteMessage.getData().get("message");
if(notification_title.contains("wallpaper"))
{
changeWallpaper(notification_message);
}
else
{
generateNotification(remoteMessage.getData().get("title"),
remoteMessage.getData().get("message"));
}
}
public void changeWallpaper(String url)
{
final WallpaperManager myWallpaperManager
= WallpaperManager.getInstance(activity);
Picasso.with(activity).load(url).into(new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
Log.i("ok", "The image was obtained correctly");
try {
myWallpaperManager.setBitmap(bitmap);
Toast.makeText(activity, "Image has been set as Desktop Wallpaper", Toast.LENGTH_SHORT).show();
// ((Activity) activity).findViewById(R.id.progressbar_wallpaper).setVisibility(View.GONE);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
Log.e("ok", "The image was not obtained");
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
Log.e("ok", "Getting ready to get the image");
//Here you should place a loading gif in the ImageView
//while image is being obtained.
}
});
}
Это успешно меняет обои в главном потоке но я хочу изменить обои в классе обслуживания, даже если приложение находится в фоновом режиме. Буду признателен за любую помощь