友盟推送到通知栏,点击对应的通知栏跳转,分为两种情况,应用存在的时候直接跳转到页面,不存在的时候打开应用再跳转到对应页面。
ps:由于详情页需要对应的登录信息,所有需要打开应用自动登录获取对应的信息。如果只是一个简单的详情页面无需如此操作。
以下代码舍去其他的友盟推送部分的东西,单纯跳转进程处理的逻辑。
1.监测app进程,使用ActivityLifecycleCallbacks
public class MyApplication extends Application{
private int isBackCount;
private int isHaveCount;
private static ENameApplication instance;
private Activity currentActivity;
@Override
public void onCreate() {
super.onCreate();
instance = this;
registerActivityLife();
}
private void registerActivityLife() {
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle bundle) {
}
@Override
public void onActivityStarted(Activity activity) {
isHaveCount++;
}
@Override
public void onActivityResumed(Activity activity) {
currentActivity = activity;
isBackCount++;
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
isBackCount--;
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
}
@Override
public void onActivityDestroyed(Activity activity) {
isHaveCount--;
}
});
}
//推送的位置可以拿到当前显示的页面
public Activity getCurrentActivity() {
return currentActivity;
}
public int getIsBackCount() {
return isBackCount;
}
public int getIsHaveCount() {
return isHaveCount;
}
}
2.在推送处理点击事件的位置
public class NotificationBroadcast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//获取对应的信息
String message = intent.getStringExtra(EXTRA_KEY_MSG);
int action = intent.getIntExtra(EXTRA_KEY_ACTION,
EXTRA_ACTION_NOT_EXIST);
try {
UMessage msg = new UMessage(new JSONObject(message));
if (action == ACTION_CLICK) {
UTrack.getInstance(context).trackMsgClick(msg);
Map<String, String> map = msg.extra;
String which = map.get("msgtype");
switch (which) {
case "1"://看自己的需求
Intent domainIntent = null;
if (isAppAlive()) {
domainIntent = new Intent(context, DetailActivity.class);
} else {
domainIntent = new Intent(context, FlashActivity.class);
}
domainIntent.putExtra("msg1", "msg");
domainIntent.putExtra("toActivity", "detail");
context.startActivity(domainIntent);
break;
}
} else if (action == ACTION_DISMISS) {
UTrack.getInstance(context).trackMsgDismissed(msg);
}
} catch (JSONException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 判断应用是否存在
*/
private boolean isAppAlive() {
if (ENameApplication.getInstance().getIsHaveCount() > 0) {
return true;
}
return false;
}
}
3.点击通知栏,应用存在则跳转到对应页面,以下是处理不存在打开应用跳转到对应详情页的逻辑。
FlashActivity.class中的操作。
//应用一般都有个启动页面,然后跳转到首页
Intent intent = getIntent().setFlags(0);//将原来的参数携带过来
intent.setClass(this, MainActivtiy.class);
//携带其他数据
intent.putExtra("othermsg", othermsg);
startActivity(intent);
然后在MainActivity中处理对应的跳转操作。
String flag = getIntent().getStringExtra("toActivity");
switch (flag) {
case 'detail':
Intent intent=getIntent();
intent.setClass(this,DetailActivity.class);
startActivity(intent);
break;
}
getIntent().setFlags(0);
getIntent()能够获取到其他页面跳转到当前页面携带的参数。
但是存在一种情况,当前页面是启动页面,即不是由其他页面跳转过来的,是桌面启动的。
第一次启动的时候直接使用getIntent()的时候就会发生闪退,第二次之后就不会。
具体原因不清楚,使用getIntent().setFlags(0);即可解决对应的问题。