JPush 推送广播触发 UI 更新操作的实现

背景

  1. JPush 相关的一切 BroadcastReceiver 不支持动态注册。
  2. 想实现收到 JPush 广播之后更新某个 Activity 的 UI,又不想使用 Service。

思路

  1. 利用 JPush 支持的自定义 Receiver 定义一个接收 JPush 广播的 Receiver,并静态注册。
  2. 在这个自定义的 Receiver 中使用新的 Intent 注册一个新的 Action,使用 onReceive 传入的 Context 广播 Intent,并在需要更新 UI 的 Activity 中动态注册新的 BroadcastReceiver 截获这个 Action。
  3. 使用 Handler 技术动态更新 UI。

代码实现

  1. 自定义 Receiver

    public class MyPushReceiver extends BroadcastReceiver {
        public MyPushReceiver() {
            super();
        }
    
        @Override
        public void onReceive(Context context, Intent intent) {
            if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
                Intent renderIntent = new Intent();
                renderIntent.setAction("com.dessert.mojito.CHANGE_STATUS");
                context.sendBroadcast(renderIntent);
    
            }
        }
    }
    
  2. 在 UI 线程中截获 Intent,使用 Handler 技术更新 UI

            BroadcastReceiver mReceiver = new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {
                    if(intent.getAction().equals("com.dessert.mojito.CHANGE_STATUS")) {
                        Message message = new Message();
                        message.what = PUSH_RECEIVED;
                        handler.sendMessage(message);
                    }
                }
            };
            IntentFilter filter = new IntentFilter();
            filter.addAction("com.dessert.mojito.CHANGE_STATUS");
            registerReceiver(mReceiver, filter);
    

你可能感兴趣的:(JPush 推送广播触发 UI 更新操作的实现)