0

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());
    

    }

  • Duplicate of https://stackoverflow.com/questions/6452466/how-to-determine-if-an-android-service-is-running-in-the-foreground – Itamar Kerbel Oct 21 '18 at 07:09
  • Possible duplicate of [How to check if a service is running on Android?](https://stackoverflow.com/questions/600207/how-to-check-if-a-service-is-running-on-android) – ceph3us Oct 06 '19 at 20:39

1 Answers1

-1
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?

Asad Ali
  • 309
  • 3
  • 14