我在應用程序中使用服務來監聽用戶按下電源按鈕的次數。實施在所有設備上都工作正常。但是當我在Android Kitkat上測試應用程序時,我發現有些問題。Android服務:START_STICKY不適用於Kitkat
只要我將應用程序從最近的應用程序中滑開,應用程序就不再監聽電源按鈕。
這裏是我一起工作的代碼:
public class Receiver extends Service {
Notification notification;
private static final int NOTIFICATION_ID = 0;
NotificationManager manager;
PendingIntent toOpen;
Intent intent;
private BroadcastReceiver POWER_BUTTON = new Powerbuttonrecceiver();
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(POWER_BUTTON, filter);
startNotify();
return START_STICKY;
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
unregisterReceiver(POWER_BUTTON);
dismissNotification();
super.onDestroy();
}
public void startNotify(){
manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
int icon = R.drawable.ic_launcher_drop;
CharSequence tickerText = "Service activated";
CharSequence tickerContent = "Service is now on. You can press your power button and the app will listen to it. Tap to turn this feature off";
intent = new Intent(Receiver.this, Options.class);
toOpen = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);
notification = new NotificationCompat.Builder(getApplicationContext())
.setContentTitle(tickerText)
.setContentText(tickerContent)
.setSmallIcon(icon)
.setOngoing(true)
.setContentIntent(toOpen)
.build();
manager.notify(NOTIFICATION_ID, notification);
}
public void dismissNotification(){
manager.cancel(NOTIFICATION_ID);
}
}
正如人們可以看到我使用的通知,以表示該服務是活躍的。讓我感到困惑的是,在從最新應用程序中刷卡後,通知仍然存在,那麼不活動的是BroadcastReceiver
?或者那是錯誤的。
在應用程序的onDestroy
我沒有調用任何函數來註冊或取消註冊以及停止服務。再一次,這個問題只能在Android KitKat中看到。請如果你們知道發生了什麼事。做幫助:)
UPDATE:我也注意到在Kitkat上的Play Music
,當我從最近的應用程序中滑過它時,音樂停止。這是Kitkat上的錯誤嗎?但SoundCloud
上的聲音/媒體播放器服務即使在從最新應用程序中移除時也能正常工作。
更新: 在Android問題跟蹤器上記錄爲Issue 63618。 閱讀問題評論瞭解更多詳情。
當你滑過應用程序,你有效地銷燬服務...是不是它呢? –
我沒有專門調用任何函數來銷燬服務。正如我之前所說的應用程序工作正常以前的Android API的除了Kitkat @MadhurAhuja –
重複的:http://stackoverflow.com/questions/20636330/start-sticky-does-not-work-on-android-kitkat – Muzikant