要在 Android 上显示的自定义广播接收器块通知 - IBM mobilefirst
Posted
技术标签:
【中文标题】要在 Android 上显示的自定义广播接收器块通知 - IBM mobilefirst【英文标题】:Custom broadcast receiver block notification to display on Android - IBM mobilefirst 【发布时间】:2017-06-30 06:36:40 【问题描述】:我想检测通知何时到达应用程序。从文档来看,我们不能使用原生 android API 来通知 Hyride 应用程序。 我按照本指南 检测通知何时到达,然后将数据发送到 javascript 部分:https://www.ibm.com/support/knowledgecenter/SSZH4A_6.2.0/com.ibm.worklight.dev.doc/devref/c_push_notifications_hybrid.html
问题是广播接收器很好地接收了通知,但没有显示。这是广播接收器的代码:
@Override
protected void onStart()
super.onStart();
String action = getPackageName() + "." + getString(R.string.app_name) + ".C2DM_MESSAGE";
//Register Custom Push Broadcast Receiver
registerReceiver(new BroadcastReceiver()
@Override
public void onReceive(Context context, Intent intent)
Log.d("test", "action :" + intent.getAction());
Log.d("test", "notification received)
abortBroadcast();
, new IntentFilter(action));
【问题讨论】:
覆盖和使用自己的 BroadcastReceiver 的目的是什么?这不是受支持的配置 目的是在收到通知后将事件发送到 javascript 部分。实际上,第一个目标是检测通知是否被点击,但我没有找到任何关于它的信息...... 实际上我通过创建一个扩展 BroadcastReceiver 的类而不是使用 registerReceiver 方法解决了这个问题。但是,如果您有任何关于检测用户点击通知的信息,我正在接受!谢谢 ! :) 【参考方案1】:我通过不使用 registerReceiver 而是使用自定义类解决了这个问题:
public class MyNotificationReceiver extends BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent)
String action = intent.getAction();
if(action.equals("com.google.android.c2dm.intent.RECEIVE"))
JSONObject data = new JSONObject();
try
data.put("notifReceived", true);
Log.d("test", "is the notif background ? ");
WL.getInstance().sendActionToJS("androidNotif", data);
catch (JSONException e)
e.printStackTrace();
并在您的清单中添加:
<receiver android:name=".MyNotificationReceiver" android:enabled="true">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE"/>
<category android:name="com.your.appname"/>
</intent-filter>
</receiver>
【讨论】:
以上是关于要在 Android 上显示的自定义广播接收器块通知 - IBM mobilefirst的主要内容,如果未能解决你的问题,请参考以下文章
我的Android进阶之旅解决Android8.0发送自定义广播接收不到的问题:PackageManager扫描静态注册广播接收器拿到ResolveInfo,指定包名和完整路径,然后发送自定义广播(代