/**
* 连接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 心跳和信鸽自定义提示音的更多相关文章

  1. ios开发小技巧之提示音播放与震动

    在ios开发中,有时候我们需要频繁播放某种提示声音,比如微博刷新提示音.QQ消息提示音等,对于这些短小且需要频繁播放的音频,最好将其加入到系统声音(system sound)里. 注意: 需要播放的音 ...

  2. web socket 心跳包的实现方案

    web socket 心跳包的实现方案05/30/2010 现在网络环境错综复杂,socket心跳包是获得健康强壮的连接的有效解决方案,今天,我们就在web socket中实现心跳包方案,是的,尽管我 ...

  3. 关于微信内置浏览器在ios上播放提示音的经验分享

    document.addEventListener("WeixinJSBridgeReady", function () { window.audio= new Audio() w ...

  4. socket心跳包机制实践与理解

    实现Socket心跳包主要分为两大类,第一采用tcp自带的KeepAlive,第二是自定义心跳包,恰巧我在产品VICA中都使用过,下面就这两种心跳包机制谈谈个人的理解与感受. 首先第一种KeepAli ...

  5. Android 极光推送JPush---自定义提示音

    极光推送提供三种方法实现Notification通知 三方开发平台发送普通消息,客户端设置PushNotificationBuilder,实现基础的Notification通知 三方开放平台发送普通消 ...

  6. TCP socket心跳包示例程序

    在做游戏开发时,经常需要在应用层实现自己的心跳机制,即定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性. 在TCP socket心跳机制中,心跳包可以由服务器发送给客户端 ...

  7. 安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片机实现控制

    安卓Socket连接实现连接实现发送接收数据,openwrt wifi转串口连接单片机实现控制 socket 连接采用流的方式进行发送接收数据,采用thread线程的方式. 什么是线程?  详细代码介 ...

  8. 超酷HTML5 Canvas图表应用Chart.js自定义提示折线图

    超酷HTML5 Canvas图表应用Chart.js自定义提示折线图 效果预览 实例代码 <div class="htmleaf-container"> <div ...

  9. VaildForm 自定义提示消息

    ValidForm插件提供了7种提示效果,其中有四种自定义效果,具体访问地址:http://validform.rjboy.cn/demo.html 个人偏爱其中两种,即 l 提示效果四:[自定义提示 ...

随机推荐

  1. js 发布订阅模式

    //发布订阅模式 class EventEmiter{ constructor(){ //维护一个对象 this._events={ } } on(eventName,callback){ if( t ...

  2. 170611 NOIP模拟赛

    第一题没做出来不应该: 第二题不难想,就是写起来很麻烦: 第三题因为学了挺久的splay就直接写的splay,没太在意常数问题,一般情况下,第k值问题主席树是比splay稍快的: 盘子序列 [题目描述 ...

  3. js控制frameset的rows

    window.parent.document.getElementById("MainWork").rows="*,0" ;

  4. HDU1914(稳定婚姻)

    http://acm.hdu.edu.cn/showproblem.php?pid=1914 思路:Gale-Shapley算法.算法过程是男士不停地求婚,女士不停地拒绝.在每一轮中,每个尚未订婚的男 ...

  5. [转][MEF插件式开发] 一个简单的例子

    偶然在博客园中了解到这种技术,顺便学习了几天. 以下是搜索到一些比较好的博文供参考: MEF核心笔记 <MEF程序设计指南>博文汇总 先上效果图 一.新建解决方案 开始新建一个解决方案Me ...

  6. 安卓下载文件怎样更新UI进度

    曾经写过几篇关于下载的文章.总的来说是下面几点: 1.维护一个下载进程的Hashmap,key:使用Md5进行处理后的文件下载地址,value为下载的Task. 以防止下载反复.并将信息保存至数据库. ...

  7. 《Java设计模式》之解释器模式

    解释器模式是类的行为模式.给定一个语言之后,解释器模式能够定义出其文法的一种表示,并同一时候提供一个解释器. client能够使用这个解释器来解释这个语言中的句子. 解释器模式的结构 以下就以一个示意 ...

  8. 大写金额换算器iOS版源码

    大写金额换算器iOS版源码 人民币金额大写转换器输入数字就可以转换成相应的人民币大写金额,操作很easy,需一键点击,就可以复制. 是財务办公人员必备的小工具. 银行.单位和个人填写的各种票据和结算凭 ...

  9. WPF学习笔记:获取ListBox的选中项

    有代码有J8: UI <UserControl x:Class="UnitViews.UserListUV" xmlns="http://schemas.micro ...

  10. kentico11 教程,

    create master page with css list menu Add the navigation menu Add a dynamic web part that will repre ...