Android – 实现服务的startForeground?

所以我不确定在哪里/如何实现这个方法来使我的服务在前台运行。 目前我在另一项活动中通过以下方式开始我的服务:

Intent i = new Intent(context, myService.class); context.startService(i); 

然后在myServices的onCreate()我尝试startForeground()…?

 Notification notification = new Notification(); startForeground(1, notification); 

所以是啊,我有点失落,不确定如何实现这一点。

我会从填写Notification 。 这是一个示例项目,展示了startForeground()的使用。

从您的主要活动中,使用以下代码启动该服务:

 Intent i = new Intent(context, MyService.class); context.startService(i); 

然后在你的服务onCreate()你会build立你的通知,并将其设置为前景像这样:

 Intent notificationIntent = new Intent(this, MainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); Notification notification = new NotificationCompat.Builder(this) .setSmallIcon(R.mipmap.app_icon) .setContentTitle("My Awesome App") .setContentText("Doing some work...") .setContentIntent(pendingIntent).build(); startForeground(1337, notification); 

这是我的代码将服务设置为前景:

 private void runAsForeground(){ Intent notificationIntent = new Intent(this, RecorderMainActivity.class); PendingIntent pendingIntent=PendingIntent.getActivity(this, 0, notificationIntent, Intent.FLAG_ACTIVITY_NEW_TASK); Notification notification=new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_launcher) .setContentText(getString(R.string.isRecording)) .setContentIntent(pendingIntent).build(); startForeground(NOTIFICATION_ID, notification); } 

我需要使用PendingIntentbuild立一个通知,这样我才能从通知中开始我的主要活动。

要删除通知,只需调用stopForeground(true);

它在onStartCommand()中被调用。 请参阅我的代码: https : //github.com/bearstand/greyparrot/blob/master/src/com/xiong/richard/greyparrot/Mp3Recorder.java

如果您想使IntentService成为前台服务

那么你应该像这样覆盖onHandleIntent()

 Override protected void onHandleIntent(@Nullable Intent intent) { startForeground(FOREGROUND_ID,getNotification()); //<-- Makes Foreground // Do something stopForeground(true); // <-- Makes it again a normal Service } 

如何通知?

简单。 这是getNotification()方法

 public Notification getNotification() { Intent intent = new Intent(this, SecondActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,0); NotificationCompat.Builder foregroundNotification = new NotificationCompat.Builder(this); foregroundNotification.setOngoing(true); foregroundNotification.setContentTitle("MY Foreground Notification") .setContentText("This is the first foreground notification Peace") .setSmallIcon(android.R.drawable.ic_btn_speak_now) .setContentIntent(pendingIntent); return foregroundNotification.build(); } 

深入了解

当服务成为前景会发生什么

这发生

在这里输入图像描述

什么是前台服务?

前台服务确保

  • 用户通过提供通知主动意识到后台正在进行。

  • 系统在内存不足时服务不会被杀死