安卓socket 心跳和信鸽自定义提示音
/**
* 连接socket 和心跳
*/
public class SocketService extends Service {
private static addNewOrderInterface mInterface; private SocketBinder socketBinder = new SocketBinder(); public static WebSocketClient client;
public static String address = "ws://192.168.0.120:8080/websocket/"; private static int count = 0;
// 发送心跳包
private static Handler timeHandler = new Handler();
private static Handler mHandler = new Handler();
private static Runnable heartBeatRunnable = new Runnable() {
@Override
public void run() {
mHandler.postDelayed(this, 15 * 1000);
sendMsg("@heart");
// socketBinder.sendMsg("@heart"); }
};
private static Runnable timeRunnable = new Runnable() {
@Override
public void run() {
timeHandler.postDelayed(this, 1000);
count++;
if (count >= 30) {
//socket 连接断开
try {
closeConnect();
L.e(SharedUtils.getInstance().getToken() + "连接socket的token");
initSocketClient(SharedUtils.getInstance().getToken());
} catch (URISyntaxException e) {
e.printStackTrace();
}
connect();
}
}
}; public static String message; static String tokenMsg; @Override
public void onCreate() {
super.onCreate(); try {
L.e(SharedUtils.getInstance().getToken() + "连接socket的token");
initSocketClient(SharedUtils.getInstance().getToken());
} catch (URISyntaxException e) {
e.printStackTrace();
} } @Override
public int onStartCommand(Intent intent, int flags, int startId) {
L.e("执行了onStartCommand()");
// String orderNo = intent.getStringExtra("orderNo");
// if (orderNo != null)
// getOrder(orderNo);
// if (client.isClosed())
connect();
return super.onStartCommand(intent, flags, startId);
} @Override
public void onDestroy() {
super.onDestroy();
L.e("执行了onDestory()");
} @Nullable
@Override
public IBinder onBind(Intent intent) {
return socketBinder;
} @Override
public boolean onUnbind(Intent intent) {
L.e("绑定服务");
return super.onUnbind(intent);
} @Override
public void unbindService(ServiceConnection conn) {
// closeConnect();
L.e("解绑服务");
super.unbindService(conn);
} public static void receiverMessage(String msg) { if (mInterface != null) {
if (msg.indexOf("heart") != -1) { } else {
mInterface.addNewData(msg);
}
}
} public static class SocketBinder extends Binder { public void service_connect_Activity() {
mHandler.post(heartBeatRunnable);
timeHandler.post(timeRunnable);
L.e("Service关联了Activity,并在Activity执行了Service的方法"); } public void addNewOrderInterface(addNewOrderInterface anInterface) {
mInterface = anInterface;
} } //断开连接
public static void closeConnect() {
try {
client.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
client = null;
} L.e("断开 socket"); } /**
* 发送消息
*/
public static void sendMsg(String msg) { if (!SharedUtils.getInstance().getLogin()) {
return;
} L.e("socket发送给服务端的消息- - >" + msg);
if (client == null)
return;
try {
client.send(msg);
} catch (WebsocketNotConnectedException e) {
if (tokenMsg == null) { L.e("socket----->WebsocketNotConnectedException异常");
e.printStackTrace();
closeConnect();
try {
initSocketClient(SharedUtils.getInstance().getToken());
} catch (URISyntaxException ee) {
ee.printStackTrace();
}
connect();
}
}
} public static void initSocketClient(String token) throws URISyntaxException { if (client == null) {
client = new WebSocketClient(new URI(address + token)) { @Override
public void onOpen(ServerHandshake serverHandshake) {
//连接成功
L.e("socket连接成功");
count = 0;
} @Override
public void onMessage(String s) {
L.e("服务端发的消息:" + s);
if (s.equals("token验证失败!")) {
tokenMsg = s;
SharedUtils.getInstance().setLogin(false);
//token 过期 或者 验证失败 停止心跳相关
mHandler.removeCallbacks(heartBeatRunnable);
timeHandler.removeCallbacks(timeRunnable); return;
} else {
tokenMsg = null;
}
if (s.indexOf("heart") != -1) {
count = 0;
} message = s;
// if (s.length() > 10)
receiverMessage(s);
if (s.length() > 5) {
// disposeData(s);
// newOrder.addNewData(s);
// OrderReceiveFragment.getInstance().addNewData(s);
}
} @Override
public void onClose(int i, String s, boolean remote) {
//连接断开,remote判定是客户端断开还是服务端断开
L.e("Connection closed by " + (remote ? "remote peer---断开??" : "us") + ", info=" + s);
//
} @Override
public void onError(Exception e) {
L.e("error:" + e);
}
};
}
} //连接
public synchronized static void connect() { new Thread() {
@Override
public void run() {
if (client != null) {
try {
client.connect();
} catch (IllegalStateException e) {
L.e(e.toString());
}
}
L.e("socket连接");
}
}.start(); } }
信鸽推送自定义提示音
信鸽后台管理 高级设置 设置自定义提示音 值为mp3文件名
MP3文件放在raw下 服务器后台设置这些
/**
* 这样做本以为会没有问题的了,结果内测还是没有声音,懵逼了。好不容易知道官方有方法可以实现了,居然不行,就继续百度吧,百啊百啊百到谷歌去了,还是那些东西啊。去找客服了,还好客服说部分机型不适配,成功甩锅。
* coding还得继续啊,下了个官方的demo,远远本本的复制了都不行,沮丧,问大佬去吧。大佬简单明了,几句话就指出问题了,他说你们都不踩8.0的坑,我傻了吧唧的就用默认的8.0了,换到7.0的和demo一个版本,好了,好了
*/
安卓socket 心跳和信鸽自定义提示音的更多相关文章
- ios开发小技巧之提示音播放与震动
在ios开发中,有时候我们需要频繁播放某种提示声音,比如微博刷新提示音.QQ消息提示音等,对于这些短小且需要频繁播放的音频,最好将其加入到系统声音(system sound)里. 注意: 需要播放的音 ...
- web socket 心跳包的实现方案
web socket 心跳包的实现方案05/30/2010 现在网络环境错综复杂,socket心跳包是获得健康强壮的连接的有效解决方案,今天,我们就在web socket中实现心跳包方案,是的,尽管我 ...
- 关于微信内置浏览器在ios上播放提示音的经验分享
document.addEventListener("WeixinJSBridgeReady", function () { window.audio= new Audio() w ...
- socket心跳包机制实践与理解
实现Socket心跳包主要分为两大类,第一采用tcp自带的KeepAlive,第二是自定义心跳包,恰巧我在产品VICA中都使用过,下面就这两种心跳包机制谈谈个人的理解与感受. 首先第一种KeepAli ...
- Android 极光推送JPush---自定义提示音
极光推送提供三种方法实现Notification通知 三方开发平台发送普通消息,客户端设置PushNotificationBuilder,实现基础的Notification通知 三方开放平台发送普通消 ...
- TCP socket心跳包示例程序
在做游戏开发时,经常需要在应用层实现自己的心跳机制,即定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性. 在TCP socket心跳机制中,心跳包可以由服务器发送给客户端 ...
- 安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片机实现控制
安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片机实现控制 socket 连接采用流的方式进行发送接收数据,采用thread线程的方式. 什么是线程? 详细代码介 ...
- 超酷HTML5 Canvas图表应用Chart.js自定义提示折线图
超酷HTML5 Canvas图表应用Chart.js自定义提示折线图 效果预览 实例代码 <div class="htmleaf-container"> <div ...
- VaildForm 自定义提示消息
ValidForm插件提供了7种提示效果,其中有四种自定义效果,具体访问地址:http://validform.rjboy.cn/demo.html 个人偏爱其中两种,即 l 提示效果四:[自定义提示 ...
随机推荐
- iOS攻城狮修炼之路
自己总结的学习iOS的笔记,打造一个全面的知识体系,iOS攻城狮修炼之路[持续更新中] iOS学习笔记01-APP相关 iOS学习笔记02-UIScrollView iOS学习笔记03-UITable ...
- poj 2404 中国邮递员问题 欧拉回路判定+状压dp
/* 状压dp 邮递员问题:求经过任意点出发经过每一条边一次并回到原点. 解法:1.如果是欧拉回路那么就是所有的边的总和. 2.一般的解法,找出所有的奇度顶点,任意两个顶点匹配,即最小完美匹配,可用状 ...
- BP神经网络及其在教学质量评价中 的应用
本文学习笔记是自己的理解,如有错误的地方,请大家指正批评.共同进步.谢谢! 之前的教学质量评价,仅仅是通过对教学指标的简单处理.如求平均值或人为的给出各指标的权值来加权求和,其评价结果带有非常大主观性 ...
- leetcode 114.Flatten Binary Tree to Linked List (将二叉树转换链表) 解题思路和方法
Given a binary tree, flatten it to a linked list in-place. For example, Given 1 / \ 2 5 / \ \ 3 4 6 ...
- TensorFlow 官方文档中文版
http://wiki.jikexueyuan.com/list/deep-learning/ TensorFlow 官方文档中文版 你正在阅读的项目可能会比 Android 系统更加深远地影响着世界 ...
- js的类库
prototype.js https://github.com/sstephenson/prototype moment js https://github.com/moment/moment thr ...
- open_basedir restriction in effect,解决php引入文件权限问题 lnmp
1.配置了虚拟域名 vim /usr/local/nginx/conf/vhost/siemens.conf server { listen 80; #listen [::]:80 default_s ...
- poj 2104 K-th Number 主席树+超级详细解释
poj 2104 K-th Number 主席树+超级详细解释 传送门:K-th Number 题目大意:给出一段数列,让你求[L,R]区间内第几大的数字! 在这里先介绍一下主席树! 如果想了解什么是 ...
- 最直观的poi的使用帮助(告诉你怎么使用poi的官网),操作word,excel,ppt
最直观的poi的使用帮助(告诉你怎么使用poi的官网),poi操作word,excel,ppt 写在最前面 其实poi的官网上面有poi的各种类和接口的使用说明,还有非常详细的样例,所以照着这些样例来 ...
- Ballot evaluation
http://acm.hdu.edu.cn/showproblem.php?pid=2986 题意很简单,主要是要处理精度,最手残的是把单词拼写错了... #include <stdio.h&g ...