gpt4 book ai didi

安卓服务 : START_STICKY does not work on Kitkat

转载 作者:IT老高 更新时间:2023-10-28 23:14:12 26 4
gpt4 key购买 nike

我在应用程序中使用服务来监听用户按下他/她的电源按钮的次数。该实现在所有设备上运行良好。但是当我在 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);
}

}

正如人们所注意到的,我正在使用通知来表示服务处于 Activity 状态。让我感到困惑的是,在从最近的应用程序中滑动后,通知仍然存在,什么是不活动的是 BroadcastReceiver?还是那是假的。

在应用程序的 onDestroy 中,我没有调用任何函数来注册或取消注册以及停止服务。再一次,这个问题只出现在 Android KitKat 中。请问各位大佬知道怎么回事。帮帮忙:)

更新:我还注意到 Kitkat 上的 Play Music,当我将它从最近使用的应用程序中滑开时,音乐停止了。这是 Kitkat 的错误吗?但是 SoundCloud 上的声音/媒体播放器服务即使在从最近应用程序中滑开时也能正常工作。

更新:记录为 Issue 63618在 android 问题跟踪器上。阅读问题评论了解更多详情。

最佳答案

似乎这是 Android 4.4 中存在的错误,通过以下方式解决:

@Override
public void onTaskRemoved(Intent rootIntent) {
// TODO Auto-generated method stub
Intent restartService = new Intent(getApplicationContext(),
this.getClass());
restartService.setPackage(getPackageName());
PendingIntent restartServicePI = PendingIntent.getService(
getApplicationContext(), 1, restartService,
PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmService = (AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmService.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() +1000, restartServicePI);

}

所以这是一个在 Service 类本身中被覆盖的方法。我使用 AlarmManager 的原因是 Kitkat 不会杀死我的服务。

关于安卓服务 : START_STICKY does not work on Kitkat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20673403/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com