Android startForeground通知消失

时间:2013-04-12 11:02:57

标签: android service notifications

我的Android应用程序启动服务以收听耳机按钮。服务正在运行时,我想显示通知。因为它也很重要,所以我决定在我的服务中使用startForeground函数。

在服务的OnCreate中,我启动BuildNotification():

 public void BuildNotification() {

    // Make sure the launch mode of the activity is singleTask, otherwise it will create a new one
    Intent intent = new Intent(this, ListItemsActivityScroll.class);
    PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);

     // Build notification
     note = new NotificationCompat.Builder(this)
             .setContentTitle(getString(R.string.notification_text))
             .setSmallIcon(R.drawable.vp_launcher)
             .setContentText(getString(R.string.notification_content))
             .setContentIntent(pIntent).build();

     startForeground(1, note); 
  }

第一次启动服务时,会显示通知并保留在状态栏中,直到服务被销毁。但是,如果服务第二次创建,它只显示几秒钟。

消失后,服务仍在运行。我还执行'adb shell dumpsys活动服务',它确实显示要在前台运行的服务,并且还给我设置了通知的正确标志:

isForeground=true foregroundId=1     foregroundNoti=Notification(contentView=com.example.mediabuttontest/0x10900a7 vibrate=null,sound=null,defaults=0x0,flags=0x62)

0x62标志表示以下内容处于活动状态:FLAG_FOREGROUND_SERVICE,FLAG_NO_CLEAR,FLAG_ONGOING_EVENT

我认为保持通知有效是正确的。

有没有人理解这种行为?为什么它在第一次创建服务时工作,但不是第二次?我的代码中有错误吗?

编辑:感谢您的时间和意见,我创建了另一个测试应用程序并开始删除代码,直到问题消失。最后,它是由启用/禁用广播接收器组件引起的:

        pm.setComponentEnabledSetting(mRemoteControlResponder,
                PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                PackageManager.DONT_KILL_APP);

不知何故,这会使通知消失。在文档中,它还提到'DONT_KILL_APP'会使您的应用程序行为不可预测:

设置此项时要小心,因为更改组件状态会使包含应用程序的行为无法预测。

我猜这是真的:)。

0 个答案:

没有答案