JPushReceiver.java 9.06 KB
package com.polysoft.nafmii.jpush;

import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import android.util.Log;

import com.alibaba.fastjson.JSON;
import com.polysoft.nafmii.bean.JPushBean;
import com.polysoft.nafmii.bean.OpenUrlBean;
import com.polysoft.nafmii.database.ObjectBox;
import com.polysoft.nafmii.database.entity.DataEntity;
import com.polysoft.nafmii.enums.ModulesEnum;
import com.polysoft.nafmii.utils.ExecutorUtils;
import com.polysoft.nafmii.utils.SystemUtils;
import com.whaty.nafmii.activity.HomeActivity;
import com.whaty.nafmii.activity.OutsideWebviewActivity;

import java.util.HashMap;
import java.util.Map;

import cn.jpush.android.api.CmdMessage;
import cn.jpush.android.api.CustomMessage;
import cn.jpush.android.api.JPushInterface;
import cn.jpush.android.api.JPushMessage;
import cn.jpush.android.api.NotificationMessage;
import cn.jpush.android.service.JPushMessageReceiver;

public class JPushReceiver extends JPushMessageReceiver {

    private static final String TAG = "PushMessageReceiver";

    private Map<String, String> aliasStatusMap = new HashMap<>();

//    private static Map<String, >

    @Override
    public void onMessage(Context context, CustomMessage customMessage) {
        String message = customMessage.message;
        String messageId = customMessage.messageId;
        if (TextUtils.isEmpty(message)) {
            return;
        }
        ExecutorUtils.main(() -> {
            JPushMgr.sendLearnLocalNotice("自定义消息标题", "自定义消息内容", message);
        });
        Log.e(TAG, "[onMessage] " + customMessage);
    }

    @Override
    public void onNotifyMessageOpened(Context context, NotificationMessage message) {
        Log.e(TAG, "[onNotifyMessageOpened] " + message);
        String json = message.notificationExtras;
        if (TextUtils.isEmpty(json)) {
            return;
        }

        JPushBean bean = JSON.parseObject(json, JPushBean.class);
        if (null == bean) {
            return;
        }

        if ("learn".equals(bean.getType())) {
            String url = bean.getUrl();
            if (null != bean.getParams()) {
                url = bean.getParams().getUrl();
            }
            if (TextUtils.isEmpty(url)) return;

            OpenUrlBean dataBean = new OpenUrlBean();
            dataBean.setLinkUrl(url);
            dataBean.setLinkType("2");

            this.startLearnActivity(context, dataBean);

//            Map<String, Object> map = new HashMap<>();
//            map.put("moduleName", ModulesEnum.HOME.name);
//            map.put("query", dataBean);
//
//            Intent intent = new Intent(context, HomeActivity.class);
//            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP );
//            intent.putExtra("changeRoute", JSON.toJSONString(map));
//            context.startActivity(intent);
        }

//        try{
//            //打开自定义的Activity
//            Intent i = new Intent(context, TestActivity.class);
//            Bundle bundle = new Bundle();
//            bundle.putString(JPushInterface.EXTRA_NOTIFICATION_TITLE,message.notificationTitle);
//            bundle.putString(JPushInterface.EXTRA_ALERT,message.notificationContent);
//            i.putExtras(bundle);
//            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP );
//            context.startActivity(i);
//        }catch (Throwable throwable){
//
//        }
    }

    @Override
    public void onMultiActionClicked(Context context, Intent intent) {
        Log.e(TAG, "[onMultiActionClicked] 用户点击了通知栏按钮");
        String nActionExtra = intent.getExtras().getString(JPushInterface.EXTRA_NOTIFICATION_ACTION_EXTRA);

        //开发者根据不同 Action 携带的 extra 字段来分配不同的动作。
        if (nActionExtra == null) {
            Log.d(TAG, "ACTION_NOTIFICATION_CLICK_ACTION nActionExtra is null");
            return;
        }
        if (nActionExtra.equals("my_extra1")) {
            Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮一");
        } else if (nActionExtra.equals("my_extra2")) {
            Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮二");
        } else if (nActionExtra.equals("my_extra3")) {
            Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮三");
        } else {
            Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮未定义");
        }
    }

    @Override
    public void onNotifyMessageArrived(Context context, NotificationMessage message) {
        Log.e(TAG, "[onNotifyMessageArrived] " + message);
    }

    @Override
    public void onNotifyMessageDismiss(Context context, NotificationMessage message) {
        Log.e(TAG, "[onNotifyMessageDismiss] " + message);
    }

    @Override
    public void onRegister(Context context, String registrationId) {
        Log.e(TAG, "[onRegister] " + registrationId);
    }

    @Override
    public void onConnected(Context context, boolean isConnected) {
        Log.e(TAG, "[onConnected] " + isConnected);
    }

    @Override
    public void onCommandResult(Context context, CmdMessage cmdMessage) {
        Log.e(TAG, "[onCommandResult] " + cmdMessage);
    }

    //    @Override
//    public void onTagOperatorResult(Context context, JPushMessage jPushMessage) {
//        TagAliasOperatorHelper.getInstance().onTagOperatorResult(context,jPushMessage);
//        super.onTagOperatorResult(context, jPushMessage);
//    }
//
//    @Override
//    public void onCheckTagOperatorResult(Context context, JPushMessage jPushMessage) {
//        TagAliasOperatorHelper.getInstance().onCheckTagOperatorResult(context,jPushMessage);
//        super.onCheckTagOperatorResult(context, jPushMessage);
//    }
//
    @Override
    public void onAliasOperatorResult(Context context, JPushMessage jPushMessage) {
        super.onAliasOperatorResult(context, jPushMessage);
        Log.d(TAG, "onAliasOperatorResult: " + jPushMessage.toString());
        String alias = jPushMessage.getAlias();
        int errorCode = jPushMessage.getErrorCode();
        if (errorCode == 0) {
            ObjectBox.put(new DataEntity(JPushMgr.JPUSH_ALIAS_KEY, alias));
        }
    }
//
//    @Override
//    public void onMobileNumberOperatorResult(Context context, JPushMessage jPushMessage) {
//        TagAliasOperatorHelper.getInstance().onMobileNumberOperatorResult(context,jPushMessage);
//        super.onMobileNumberOperatorResult(context, jPushMessage);
//    }

    @Override
    public void onNotificationSettingsCheck(Context context, boolean isOn, int source) {
        super.onNotificationSettingsCheck(context, isOn, source);
        Log.e(TAG, "[onNotificationSettingsCheck] isOn:" + isOn + ",source:" + source);
    }



    private void startLearnActivity(Context context, OpenUrlBean dataBean) {
        if (SystemUtils.isAppAlive(context, context.getPackageName())) {
            //如果存活的话,就直接启动DetailActivity,但要考虑一种情况,就是app的进程虽然仍然在
            //但Task栈已经空了,比如用户点击Back键退出应用,但进程还没有被系统回收,如果直接启动
            //DetailActivity,再按Back键就不会返回MainActivity了。所以在启动
            //DetailActivity前,要先启动MainActivity。
            Log.i("NotificationReceiver", "the app process is alive");
            Intent mainIntent = new Intent(context, HomeActivity.class);
            //将MainAtivity的launchMode设置成SingleTask, 或者在下面flag中加上Intent.FLAG_CLEAR_TOP,
            //如果Task栈中有MainActivity的实例,就会把它移到栈顶,把在它之上的Activity都清理出栈,
            //如果Task栈不存在MainActivity实例,则在栈顶创建
            mainIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);

            Intent detailIntent = new Intent(context, OutsideWebviewActivity.class);
            detailIntent.putExtra("data", JSON.toJSONString(dataBean));
            Intent[] intents = {mainIntent, detailIntent};
            context.startActivities(intents);
        } else {
            //如果app进程已经被杀死,先重新启动app,将DetailActivity的启动参数传入Intent中,参数经过
            //SplashActivity传入MainActivity,此时app的初始化已经完成,在MainActivity中就可以根据传入             //参数跳转到DetailActivity中去了
            Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
            launchIntent.setFlags(
                    Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

            Map<String, Object> dataMap = new HashMap<>();
            dataMap.put("moduleName", ModulesEnum.HOME.name);
            dataMap.put("query", dataBean);

            Map<String, Object> jpushMap = new HashMap<>();
            jpushMap.put("type", "learn");
            jpushMap.put("changeRoute", dataMap);

            launchIntent.putExtra("jpush", JSON.toJSONString(jpushMap));
            context.startActivity(launchIntent);
        }


    }

}