简体   繁体   中英

How to confirm service is a foreground service

I have a service playing music (media player) and it's working fine.

  1. How to coinfirm this service is a foreground service?
  2. How to simulate system load and check if the service will be killed or not?

    This is my code.

    public int onStartCommand(Intent intent, int flags, int startId) { initMediaSession(); initMediaPlayer(); buildNotification(PlaybackStatus.PLAYING);
    return super.onStartCommand(intent, flags, startId); }

    private void buildNotification(PlaybackStatus playbackStatus) {

     final int NOTIFY_ID = 1002; String aMessage=""; String name = "my_package_channel"; String id = "my_package_channel_1"; // The user-visible name of the channel. String description = "my_package_first_channel"; // The user-visible description of the channel. Intent intent; PendingIntent pendingIntent; NotificationCompat.Builder builder; if (notifManager == null) { notifManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { int importance = NotificationManager.IMPORTANCE_HIGH; NotificationChannel mChannel = notifManager.getNotificationChannel(id); if (mChannel == null) { mChannel = new NotificationChannel(id, name, importance); mChannel.setDescription(description); notifManager.createNotificationChannel(mChannel); } builder = new NotificationCompat.Builder(this, id); intent = new Intent(this, NotificationReturnSlot.class); pendingIntent = PendingIntent.getActivity(this, 1, intent, 0); builder.setContentTitle(aMessage) // required .setSmallIcon(R.mipmap.ic_launcher) .setContentText(this.getString(R.string.app_name)) // required .setAutoCancel(false) .setContentIntent(pendingIntent) .setVibrate(new long[]{0L}) ; } else { builder = new NotificationCompat.Builder(this); intent = new Intent(this, NotificationReturnSlot.class); pendingIntent = PendingIntent.getActivity(this, 1, intent, 0); builder.setContentTitle(aMessage) // required .setSmallIcon(R.mipmap.ic_launcher) .setContentText(this.getString(R.string.app_name)) // required .setAutoCancel(false) .setContentIntent(pendingIntent) .setVibrate(new long[]{0L}) .setPriority(Notification.PRIORITY_HIGH); } int mId = 1489; startForeground(mId, builder.build()); 

    }

private boolean isServiceRunning(String serviceName){
boolean serviceRunning = false;
ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningServiceInfo> l = am.getRunningServices(50);
Iterator<ActivityManager.RunningServiceInfo> i = l.iterator();
while (i.hasNext()) {
    ActivityManager.RunningServiceInfo runningServiceInfo = i
            .next();

    if(runningServiceInfo.service.getClassName().equals(serviceName)){
        serviceRunning = true;

        if(runningServiceInfo.foreground)
        {
            //service run in foreground
        }
    }
}
return serviceRunning;

}

If you want to know if your service is running in foreground just open some others fat applications and then check if service is still running or just check flag service.foreground

Source: How to determine if an Android Service is running in the foreground?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM