消息推送打开应用之判断app状态,running_or_exit?

消息推送打开应用之判断app状态,running or exit?

在开发过程中往往会有这样一个需求,消息推送过来,点击notification,跳转到指定页面,这样就会出现一个问题,你跳转的逻辑是怎么样的?有些应用比较简单,直接重新打开应用,这样体验并不好,如果应用已经打开了,只是home出去了。

正确的逻辑应该是这样:

  1. 判断应用是否在运行。
  2. 如果No直接打开应用跳转到指定页面,Yes 正在运行,不用重新启动一遍应用。
  3. 判断当前页面是否是需要跳转的页面:如果不是,发意图跳转到指定页;如果在当前页,可能会刷新当前页更新内容等等,根据具体需求来定。

下面是部分代码示例

public class MyReceiver extends BroadcastReceiver {
//省略部分无关代码
    private boolean isRunning; 
    private ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
    @Override
    public void onReceive(Context context, Intent intent) {
            if(JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
        DLog.i(TAG, "[MyReceiver] 用户点击打开了通知");
        isRunning = isAppRunning(context);
        if(isRunning){
            //在这里判断当前activity的name是否是要跳转的
            ComponentName cn = activityManager.getRunningTasks(1).get(0).topActivity;
            if(!cn.getClassName().equals("你要跳转的页面包名全路径"){
                //不是的话,直接跳转
                ...
            }else{
                //是的话,进行更新页面操作等
                ...
            }
        }
    }

    /**
 * 判断app是否正在运行
 * @param context
 * @return  运行状态
 */
    private boolean isAppRunning(Context context) {

    List<RunningTaskInfo> appTasks = activityManager.getRunningTasks(100);

    boolean isAppRunning = false;
    String MY_PKG_NAME = "com.xywy.askforexpert";

    for (RunningTaskInfo info : appTasks) {
        if (info.topActivity.getPackageName().equals(MY_PKG_NAME) || info.baseActivity.getPackageName().equals(MY_PKG_NAME)) {
            isAppRunning = true;
            Log.i(TAG,info.topActivity.getPackageName() + " info.baseActivity.getPackageName()="+info.baseActivity.getPackageName());
            break;
        }
    }

    return isAppRunning;

    }   
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值