如何保持媒体播放器服务运行直到被杀死?

时间:2019-10-22 11:32:50

标签: android android-service

我有一个媒体播放器服务,每当用户清除最近的应用程序时,该服务就会被杀死。我希望该服务继续在后台播放。我尝试过

expand

@Override
    public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
        return START_STICKY;
    }

但是它不起作用。我该如何解决?

2 个答案:

答案 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);
}