我有一个媒体播放器服务,每当用户清除最近的应用程序时,该服务就会被杀死。我希望该服务继续在后台播放。我尝试过
expand
和
@Override
public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
return START_STICKY;
}
但是它不起作用。我该如何解决?
答案 0 :(得分:1)
根据帕特尔先生的回答
当前端活动未运行或未从最近的列表中删除时,许多制造商将不允许运行后台服务。
有一种方法可以满足您的要求。
您可以通过在应用程序中设置不可取消的通知来在后台运行服务。直到您使用关闭按钮以编程方式强制关闭通知,您的服务才会在后台运行。
希望这可以解决您的问题。
答案 1 :(得分:1)
Google进行了一些更新:
其中一些更新包括安全性,它已到达服务。这意味着我们将无法在不通知用户的情况下在后台执行冗长的操作。
前景 前台服务执行一些操作,这些操作对于 用户。例如,音频应用将使用前台服务来播放 音轨。前台服务必须显示通知。 即使没有用户,前景服务也将继续运行 与该应用进行交互。
背景 后台服务执行的操作不会被直接注意到 由用户。例如,如果某个应用使用服务来压缩其 存储,通常是后台服务。注意:如果您的应用 定位到API级别26或更高级别,系统对 当应用本身不存在时运行后台服务 前景。在大多数情况下,您的应用应使用预定的 工作。
确保尽快致电 startForeground
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
String input = intent.getStringExtra("inputExtra");
createNotificationChannel();
Intent notificationIntent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this,
0, notificationIntent, 0);
Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("Foreground Service")
.setContentText(input)
.setSmallIcon(R.drawable.ic_stat_name)
.setContentIntent(pendingIntent)
.build();
startForeground(1, notification);
//do heavy work on a background thread
//stopSelf();
return START_STICKY;
}
这是启动前台服务的方式:
public void startService() {
Intent serviceIntent = new Intent(this, ForegroundService.class);
serviceIntent.putExtra("inputExtra", "Foreground Service Example in Android");
ContextCompat.startForegroundService(this, serviceIntent);
}