发表于: 2018-12-05 22:54:03
0 979
一、今天完成的事情
友盟推送自定义通知
自定义通知样式
在PushSDK里,UmengMessageHandler类负责处理消息,包括通知和自定义消息。其中,成员函数getNotification负责定义通知栏样式。若SDK默认的消息展示样式不符合需求,可通过覆盖该方法来自定义通知栏展示样式。
UmengMessageHandler messageHandler = new UmengMessageHandler()
/*
通知的回调方法,通知到达时会回调
*/
@Override
public void dealWithNotificationMessage(Context context, UMessage msg) {
//调用super会展示通知,不调用super不会展示通知
super.dealWithNotificationMessage(context, msg);
/*
自定义通知栏样式
*/
@Override
public Notification getNotification(Context context, UMessage msg) {
switch (msg.builder_id) {
case 1:
//推送时,将自定义样式设为1,即可使用此样式,
return MyNotificationManager.getDefaultNotification(context, msg.title, msg.text);
default:
//默认为0,若builder_id不存在,使用默认
return super.getNotification(context, msg);
}
}
};
mPushAgent.setMessageHandler(messageHandler);
自定义通知打开动作
自定义行为的数据放在UMessage.custom字段。 在【友盟+】后台或通过API发送消息时,在“后续动作”中的“自定义行为”中输入相应的值或代码即可实现。若开发者需要处理自定义行为,则可以重写方法dealWithCustomAction()。其中自定义行为的内容,存放在UMessage.custom中。
需要注意,自定义通知需要考虑适配Android 8.0,8.0的Notification需要设置Channel,另外,自定义通知的布局不能使用ConstraintLayout,否则会报错。
/**
* 自定义行为的回调处理,参考文档:高级功能-通知的展示及提醒-自定义通知打开动作
* UmengNotificationClickHandler是在BroadcastReceiver中被调用,故如果需启动Activity,需添加Intent.FLAG_ACTIVITY_NEW_TASK
* */
UmengNotificationClickHandler notificationClickHandler = new UmengNotificationClickHandler() {......
@Overridepublic void dealWithCustomAction(Context context, UMessage msg) {
//根据msg.cutom来执行下一步动作
} catch(JSONException e) {
e.printStackTrace();
}
}
};
//使用自定义的NotificationHandler
mPushAgent.setNotificationClickHandler(notificationClickHandler);
其他的一些设置
//设置显示最多通知条数,超出设定将旧通知隐藏
mPushAgent.setDisplayNotificationNumber(3);
//设置消息免打扰时间,23:00至07:00
mPushAgent.setNoDisturbMode(23, 0, 7, 0);
//关闭消息免打扰
//mPushAgent.setNoDisturbMode(0, 0, 0, 0);
//设置30秒内同一应用接收到多条通知时不重复提醒
mPushAgent.setMuteDurationSeconds(30);
控件Switch
使用方式还是比较简单
在布局中添加
<Switch
android:id="@+id/switch_news_push"
android:layout_width="0dp"
android:layout_height="22dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:text="@string/news_push"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/tv_push_setting"
app:layout_constraintTop_toBottomOf="@+id/line_1" />
在代码中引用并设置监听
Switch pushNewsSW = (Switch) findViewById(R.id.switch_news_push);
//setListener
pushNewsSW.setOnCheckedChangeListener(this);
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
switch (compoundButton.getId()) {
case R.id.switch_news_push:
......
break;
default:
break;
}
二、明天的计划
统计
三、遇到的问题
自定义Notification使用ConstraintLayout布局会报错
四、收获
友盟推送自定义通知
控件Switch
评论