我正在使用应用程序中的服务来监听用户按下电源按钮的次数。该实现在所有设备上都正常工作。但是当我在Android 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中出现。如果您们知道发生了什么,请帮忙解决 :)
更新:我还注意到,在Kitkat上使用Play Music
时,从最近使用的应用程序中向左滑动后音乐会停止。这是Kitkat上的一个错误吗?但是在SoundCloud
上的声音/媒体播放器服务甚至在从最近使用的应用程序中向左滑动后也可以正常工作。
更新: 已记录为问题63618的安卓问题跟踪器上。 阅读问题评论以获取更多详细信息。