我有一个使用NotificationListenerService
的应用程序。它可以在低于Android Oreo的api上完美运行,但是特别是在Android Oreo上,当用户重新启动应用程序时,该系统似乎无法启动该服务(在用户首次授予许可的那一刻它就可以工作),即使权限已被授予。具体来说,我在StackOverflow上找不到任何解决方案。
Android清单
<service android:name=".Services.MyCustomNotificationListener"
android:label="MyAppName"
android:exported="true"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
<intent-filter>
<action android:name="android.service.notification.NotificationListenerService" />
</intent-filter>
最佳答案
好的,这没有经过良好测试。我只是想把它扔在那里,希望能帮助其他遇到同样问题的人。看来您必须使用onListenerConnected和getActiveNotification()来使OREO设备接收通知。这是我的代码:
public class ListenForNotificationsService extends NotificationListenerService {
private String TAG = this.getClass().getSimpleName();
@Override
@TargetApi(Build.VERSION_CODES.N)
public void onListenerConnected() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
getActiveNotifications();
}
Log.d(TAG, "Listener connected");
}
@Override
public void onNotificationPosted(StatusBarNotification sbn) {
Log.d(TAG, "Notification received");
}
@Override
public void onNotificationRemoved(StatusBarNotification sbn) {
if (sbn.getPackageName() != null) {
Log.d(TAG, "Notification removed:" + sbn.getPackageName() + ":" + sbn.getId());
}
}
@Override
@TargetApi(Build.VERSION_CODES.N)
public void onListenerDisconnected() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
// Notification listener disconnected - requesting rebind
requestRebind(new ComponentName(this, NotificationListenerService.class));
}
}
}
请注意,我不知道onListenerDisconnected()是否正确或什至是必需的,请谨慎使用。还有一个想法是,由于OREO中的DEEP SLEEP发生了变化,可能还需要其他方法来处理它。 YMMV,这只是浪费了我很多时间,所以希望它将对其他人有所帮助。