gpt4 book ai didi

Android,广播可打包数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:43:39 26 4
gpt4 key购买 nike

我已经实现了一个扩展 NotificationListenerService 的类,它可以很好地接收发布的通知。

然后我想接收并广播 statusBarNotification 对象。

我会做以下事情:

@Override
public void onNotificationPosted(StatusBarNotification statusBarNotification) {

Intent intent = new Intent();
intent.putExtra("STATUS_BAR_NOTIFICATION",statusBarNotification);
intent.setAction("com.example.NotificationPosted");
sendBroadcast(intent);
}

但是当我这样做时,出现以下错误:

01-05 01:50:14.333  19574-19673/com.example W/NotificationListenerService[NotificationListener]﹕ Error running onNotificationPosted
java.lang.RuntimeException: Not allowed to write file descriptors here
at android.os.Parcel.nativeAppendFrom(Native Method)
at android.os.Parcel.appendFrom(Parcel.java:431)
at android.os.Bundle.writeToParcel(Bundle.java:1679)
at android.os.Parcel.writeBundle(Parcel.java:636)
at android.app.Notification.writeToParcel(Notification.java:962)
at android.service.notification.StatusBarNotification.writeToParcel(StatusBarNotification.java:106)
at android.os.Parcel.writeParcelable(Parcel.java:1285)
at android.os.Parcel.writeValue(Parcel.java:1204)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:618)
at android.os.Bundle.writeToParcel(Bundle.java:1692)
at android.os.Parcel.writeBundle(Parcel.java:636)
at android.content.Intent.writeToParcel(Intent.java:7013)
at android.app.ActivityManagerProxy.broadcastIntent(ActivityManagerNative.java:2361)
at android.app.ContextImpl.sendBroadcast(ContextImpl.java:1127)
at android.content.ContextWrapper.sendBroadcast(ContextWrapper.java:365)
at com.example.NotificationListener.onNotificationPosted(NotificationListener.java:113)
at android.service.notification.NotificationListenerService$INotificationListenerWrapper.onNotificationPosted(NotificationListenerService.java:168)
at android.service.notification.INotificationListener$Stub.onTransact(INotificationListener.java:56)
at android.os.Binder.execTransact(Binder.java:404)
at dalvik.system.NativeStart.run(Native Method)

谁能看出我做错了什么,或者这是不可能的。 StatusBarNotification 实现 Parcelable

最佳答案

我在处理来自 Twitter 的通知时遇到了同样的问题。我成功解决了将通知的额外内容设置为 null 的问题。

试试这个:

@Override
@SuppressLint("NewApi") // Notification.extras is only available in API Level 19+
public void onNotificationPosted(StatusBarNotification statusBarNotification) {

// Apprarently, the bug is caused by the extras when they're written to the parcel
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
statusBarNotification.getNotification().extras = null;
}
Intent intent = new Intent();
intent.putExtra("STATUS_BAR_NOTIFICATION",statusBarNotification);
intent.setAction("com.example.NotificationPosted");
sendBroadcast(intent);
}

请注意,如果您发送 contentIntent,此解决方案可能会破坏通知应用程序的功能(应用程序可能会认为额外内容存在而无需检查)。

关于Android,广播可打包数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20929107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com