在上班工作中的一个项目中使用到了百度推送,以前对推送一无了解,现将百度推送学习总结分享如下。
1、首先配置权限。

    <!-- Push service 运行需要的权限 --><uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /><uses-permission android:name="android.permission.BROADCAST_STICKY" /><uses-permission android:name="android.permission.WRITE_SETTINGS" /><uses-permission android:name="android.permission.VIBRATE" /><!-- for log. --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/><uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" /><uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/><uses-permission android:name="android.permission.DISABLE_KEYGUARD" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

2、客户端实现自己的Receiver(继承自BroadcastReceiver),用于处理当接收到推送消息时的处理响应事件。

<! --  push service client -->
<receiver android:name="your.package.PushMessageReceiver">
<intent-filter>
<! --  接收 push 消息  -->
<action android:name="com.baidu.android.pushservice.action.MESSAGE" />
<! --  接收 bind、setTags 等 method 的返回结果 -->
<action android:name="com.baidu.android.pushservice.action.RECEIVE" />
<! --  可选。如果不声明,用户点击通知后,默认打开应用,如果在应用中进行了申明,点击通知消息时不会打开应用,应该在自己写的Receiver类里进行处理,如打开某个Activity,同时Receiver会接收到用户点击行为的intent,并获取通知的标题,内容或自定义内容等-->
<action android:name="  com.baidu.android.pushservice.action.notification.CLICK” />
</intent-filter>
</receiver>

if (intent.getAction().equals(PushConstants.ACTION_RECEIVER_NOTIFICATION_CLICK))  {
//  通知标题
String title = intent.getStringExtra(PushConstants.EXTRA_NOTIFICATION_TITLE);
//  通知内容
String content = intent.getStringExtra(PushConstants.EXTRA_NOTIFICATION_CONTENT);
}

3、配置PushService服务

<! --  push service start  -->
<! --  用于接收系统消息以保证 PushService 正常运行  -->
<receiver android:name="com.baidu.android.pushservice.PushServiceReceiver"
android:process=":bdservice_v1">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"  />
<action android:name="com.baidu.android.pushservice.action.notification.SHOW" />
<action android:name="com.baidu.android.pushservice.action.media.CLICK" />
</intent-filter>
</receiver>
<! --  Push 服务接收客户端发送的各种请求-->
<receiver android:name="com.baidu.android.pushservice.RegistratonReceiver"
android:process=":bdservice_v1">
<intent-filter>
<action  android:name="com.baidu.android.pushservice.action.METHOD" />
<action android:name="com.baidu.android.pushservice.action.BIND_SYNC" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
<data android:scheme="package" />
</intent-filter>
</receiver>
<! --  Push  服务  -->
<service android:name="com.baidu.android.pushservice.PushService"
android:exported="true"
android:process=":bdservice_v1"/>
<! --  push service end -->

4、调用API

>>1. 在主 Activiy 的 OnCreate 方法中,调用接口 startWork,其中 loginValue 是百度账户的accessToken 或者是 ApiKey,由 loginType 决定。
PushManager.startWork(context, loginType, loginValue)

功能:完成 Push 服务的初始化, 并且完成自动 bind 工作
参数
context:当前执行 Context
loginType:String 绑定认证方式——无账号认证方式用 PushConstants.LOGIN_TYPE_API_KEY ;百度 Auth2.0 认证方式用
PushConstants.LOGIN_TYPE_ACCESS_TOKEN
loginValue: 和 loginType 对应,分别是应用的 API KEY,或者百度 Auth2.0 Access Token

>>2. 自定义通知样式(可选)
通知样式定制, 改变 Notification 里的铃声、震动、显示与消失行为,并定制通知栏的 layout、图标、标题、内容、状态栏图标等。

CustomPushNotificationBuilder cBuilder = new CustomPushNotificationBuilder(layoutId,
layoutIconId, layoutTitleId, layoutTextId );
cBuilder.setNotificationFlags(Notification.FLAG_AUTO_CANCEL);
cBuilder.setNotificationDefaults(Notification.DEFAULT_SOUND  |
Notification.DEFAULT_VIBRATE);
cBuilder.setStatusbarIcon( statusbarIconId);
cBuilder.setLayoutDrawable( notificationIconId);
PushManager.setNotificationBuilder(this,  notificationId, cBuilder);

>>3.客户端程序需要自己实现一个 BroadcastReceiver 来接收 Push 消息和接口回调

public class PushMessageReceiver extends BroadcastReceiver {public static final String TAG = PushMessageReceiver.class.getSimpleName();
@Overridepublic void onReceive(final Context context, Intent intent) {if (intent.getAction().equals(PushConstants.ACTION_MESSAGE)) {// 处理push消息String message = intent.getExtras().getString(PushConstants.EXTRA_PUSH_MESSAGE_STRING);
Intent responseIntent = null;responseIntent = new Intent(PushDemoActivity.ACTION_MESSAGE);responseIntent.putExtra(PushDemoActivity.EXTRA_MESSAGE, message);responseIntent.setClass(context, PushDemoActivity.class);responseIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(responseIntent);        } else if (intent.getAction().equals(PushConstants.ACTION_RECEIVE)) {// 处理bind、setTags 等方法口的返回数据
            final String method = intent.getStringExtra(PushConstants.EXTRA_METHOD);
            final int errorCode = intent.getIntExtra(PushConstants.EXTRA_ERROR_CODE,PushConstants.ERROR_SUCCESS);
            final String content = new String(intent.getByteArrayExtra(PushConstants.EXTRA_CONTENT));Intent responseIntent = null;responseIntent = new Intent(PushDemoActivity.ACTION_RESPONSE);responseIntent.putExtra(PushDemoActivity.RESPONSE_METHOD, method);responseIntent.putExtra(PushDemoActivity.RESPONSE_ERRCODE, errorCode);responseIntent.putExtra(PushDemoActivity.RESPONSE_CONTENT, content);responseIntent.setClass(context, PushDemoActivity.class);responseIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(responseIntent);} else if (intent.getAction().equals(PushConstants.ACTION_RECEIVER_NOTIFICATION_CLICK)) {// 处理用户点击通知消息时响应事件Intent aIntent = new Intent();aIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);aIntent.setClass(context, CustomActivity.class);String title = intent.getStringExtra(PushConstants.EXTRA_NOTIFICATION_TITLE);aIntent.putExtra(PushConstants.EXTRA_NOTIFICATION_TITLE, title);String content = intent.getStringExtra(PushConstants.EXTRA_NOTIFICATION_CONTENT);aIntent.putExtra(PushConstants.EXTRA_NOTIFICATION_CONTENT, content);context.startActivity(aIntent);}}
}

5、常用的类和API
>>1.常用的类:

Class 描述
PushManager PushManager 提供了所有使用 Push 服务的静态方法
CustomPushNotificationBuilder

提供了改变 Notification 里的铃声、
震动、显示与消失行为,并定制通知栏的 layout、图标、标题、内容、
状态栏图标的构造函数和方法

PushSettings PushSettings 提供了端上 Push 服务的配置静态方法

>>2.API

method detail class.api
Push 服务接口 提供 Push 服务 startWork
Tag 管理接口 Tag 的创建与删除 setTags(Context,List<String>),delTags(...)
通知管理接口 自定义通知样式

CustomPushNotificationBuilder, setNotificationFlags,
setNotificationDefaults, setStatusbarIcon,
setLayoutDrawable, setNotificationBuilder

推送效果反馈 反馈推送通知的效果 activityStarted,  activityStoped
设置接口 Push 服务设置 enableDebugMode

转载于:https://www.cnblogs.com/a284628487/archive/2013/06/12/3132829.html

Android 百度推送使用总结相关推荐

  1. Android 百度推送服务

    1.资源链接 百度官方文档:http://push.baidu.com/doc/android/api: 百度推送SDK下载:http://push.baidu.com/sdk/push_client ...

  2. 开发笔记-Android消息推送骚操作:亚马逊-SNS对接FCM和百度云推送

    写在前面: 之前使用阿里云的服务器用阿里消息推送好好的,然后因为国外业务需要使用亚马逊服务器,阿里云推送也不能用,用亚马逊的 SNS (短信消息推送服务),SNS 可以对接多家推送平台,其中 Andr ...

  3. Android 消息推送

    Android 消息推送 那位大哥做过啊 android是用服务做吧? pushsharp 雲推送 你要有服務器來服務 不是云推送吧 去搜這個,有server,有client,有demo 自己做的话, ...

  4. android 统一推送平台,工信部实验室成立安卓统一推送联盟:推送服务将实现统一...

    据微信公众号" 泰尔终端实验室"7月19日消息,移动互联网时代,消息推送是移动应用(APP)的一项重要功能,目前中国安卓系统生态环境尚不成熟,设备碎片化现象严重,导致不同应用与操作 ...

  5. (4.2.12.3)浅谈第三方推送[bug查询]:百度推送、小米推送、华为推送

    前言(常见坑): 小心是AndroidManifest文件被别人改动过...... 升级推送SDK时往往可能会引入新问题.....除非有重大更新,否则可以延迟2个版本进行升级 为了更好应对出问题的用户 ...

  6. Android消息推送叨逼叨

    最近在搞即时消息推送.了解了推送服务实现的基本原理.通过长连接去实现及时的推送,或者通过轮询的方式去实现伪及时的推送.当然,通常我们选择前者.如果实现长连接就要用到socket,所以简单了解了下soc ...

  7. Android消息推送 解决方案

    前言 鉴于现在运营需求的增强,消息推送在Android开发中应用的场景是十分常见 如电商的活动宣传.资讯类产品进行新闻推送等等 推送消息截图 今天,我将全面介绍Android中实现消息推送的7种主流解 ...

  8. Android 消息推送OnePush

    Android 消息推送 1.实现原理 1.消息推送的实质 实际上,是当服务器有新消息需推送给用户时,先发送给应用App,应用App再发送给用户 推送的消息一般是用户需要的或app希望用户知道的消息 ...

  9. 【android极光推送】—从客户端到后台,一文通吃

    前记 推送原理浅析 平台说明 概念解释 推送的三种实现方式 客户端直接向推送服务方发送Http请求 项目服务器通过Http转发推送请求至推送服务方 项目服务端使用SDK进行功能集成 关于推送的种类概述 ...

最新文章

  1. 解决arXiv上传LaTeXpaper的坑
  2. .Net中的设计模式——Iterator模式
  3. Vue通过eventBut实现组件全局通信
  4. Open XML应用安全(2)OLE机制
  5. 用Python实现快速排序
  6. 化验室计算机系统验证风险评估,计算机化系统验证风险评估报告.doc
  7. 线程的3种实现方式并深入源码简单分析实现原理
  8. Android 仿QQ消息界面
  9. python应聘的职位_Python学到哪种程度可以去应聘相关的职位了?
  10. 20130331java语言基础学习笔记-语句_breakcontinue
  11. 在Python27中运行pip install dlib装载库dlib所引起的问题解决
  12. 电子商务网站的购物流程设计(简述)
  13. 计算机专业英语缩略词
  14. 0到1认识计算机:通俗讲解计算机工作原理
  15. 285个地级市的灯光数据(1992-2013年)和雾霾(PM2.5)数据(1998-2016年)
  16. FaceBook到底验证个啥?
  17. 各大瀑布流简析与建议
  18. 低代码学习教程:如何编辑自定义打印模版?
  19. 使用regexp_extract、regexp_replace函数过滤特殊字符时,不同的执行情境下(hive -e;hive -f),正则表达式的内容有变化
  20. pytorch Cosine Annealing LR

热门文章

  1. ios nstimer实现延时_iOS中定时器NSTimer的使用
  2. Mybatis多表模型
  3. 怎么做手机的上下滑动_diy滴胶手机壳到底怎么做呢?
  4. testng连接MySQL_Selenium+TestNG实战-8-连接数据库方法去验证文章是否发布
  5. 鸿蒙第一款手机,拿下“国内第一手机商”的OPPO,打算弃用华为鸿蒙?
  6. python的def语句_【零基础学Python】def语句,参数和None值
  7. setid android,android-如何将setId()用于imageView
  8. python spark hadoop_使用Scala或Python列出存储在Hadoop HDFS上的Spark群集中可用的所有文件?...
  9. Centos7 重启网卡
  10. 为什么现在好多年轻人连1万都掏不出来,却觉得100万很少?