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