Как остановить службу, если обои установлены из другого приложения

#java #android #service #live-wallpaper #wallpaper

#java #Android #Обслуживание #живые обои #Обои

Вопрос:

Я использую службу для смены обоев через некоторый интервал, и она работает нормально, теперь проблема в том, что «Если пользователь установил обои из любого другого приложения, которое не отображается, потому что моя служба приложений работает в фоновом режиме», как я могу остановить это, если пользователь установил обои любого другого приложения.

    public class Wallpaper extends Service { 
    SharedPreferences customSharedPreference;
    int img[] = { R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d,
            R.drawable.e, R.drawable.f, R.drawable.g, R.drawable.h,
            R.drawable.i, R.drawable.j, R.drawable.k, R.drawable.l,
            R.drawable.m, R.drawable.n, R.drawable.o };
    WallpaperManager wpm;

    int delay = 0;
    Timer timer;
    int index = -1;
    int int_delay = 500;

    public Wallpaper() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public void onCreate() {

        delay = 10;
        customSharedPreference = getSharedPreferences(
                "com.janbark.live.wall.paper", Context.MODE_PRIVATE);
        int_delay = Integer.parseInt(customSharedPreference.getString(
                "userChoice", "500").toString());
        timer = new Timer();
    }

    @Override
    public void onStart(Intent intent, int startId) {

        timer.scheduleAtFixedRate(new TimerTask() {

            public void run() {
                index  ;
                if (int_delay != Integer.parseInt(customSharedPreference
                        .getString("userChoice", "500").toString())) {
                    timer.cancel();
                }
                Log.d("TAGDELAY", ""   int_delay);
                wpm = WallpaperManager.getInstance(getApplicationContext());

                if (index <= 14) {
                    if(!customSharedPreference.getBoolean("Live", true)){
                        timer.cancel();
                        stopService(new Intent(Wallpaper.this,Wallpaper.class));
                    }
                    try {
                        wpm.setResource(img[index]);

                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    if (index == 14)
                        index = -1;
                }

            }

        }, delay, int_delay);

    }

    @Override
    public void onDestroy() {

    }
}
  

Ответ №1:

Если обои, которые вы устанавливаете, являются живыми, и кажется, что это так, используйте это:

 boolean wallpaperWasSetByAnotherApp() {
     WallpaperManager wp_mngr = (WallpaperManager) getSystemService(WALLPAPER_SERVICE);
     WallpaperInfo info = wp_mngr.getWallpaperInfo();
     if (info == null) {
         // wallpaper is a static image
         return true; 
     } else {
         // wallpaper is live, check implementing service
         return !info.getComponent().equals(new ComponentName(this, getClass()));
     }
}