要在 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 学习随笔十八(广播与服务 )

android 广播自定义广播接收问题

Android - 使用广播接收器重新加载活动

我的Android进阶之旅解决Android8.0发送自定义广播接收不到的问题:PackageManager扫描静态注册广播接收器拿到ResolveInfo,指定包名和完整路径,然后发送自定义广播(代