/**
* 连接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. [bzoj1176]Mokia[CDQ分治]

    啃了一天论文,发现CDQ分治的原理其实很简单,大概就是这样的一类分治:将左右区间按一定规律排序后分开处理,递归到底时直接计算答案,对于一个区间,按照第二关键字split成两个区间,先处理左区间,之后因 ...

  2. 在IIS6,7中部署ASP.NET网站[转]

    阅读目录 开始 查看web.config文件 在IIS中创建网站 IIS6 添加扩展名映射 IIS6 无扩展名的映射 目录的写入权限 SQL SERVER的配置 在IIS7中部署ASP.NET程序 8 ...

  3. NIO基础学习——缓冲区

    NIO是对I/O处理的进一步抽象,包含了I/O的基础概念.我是基于网上博友的博客和Ron Hitchens写的<JAVA NIO>来学习的. NIO的三大核心内容:缓冲区,通道,选择器. ...

  4. 【sql技巧】mysql修改时,动态指定要修改的字段 update `table` set (case when ....) = 1 where id = xx

    如果你点进了这篇帖子,那么你一定遇到了跟我一样的问题.别看题目的set case when...,我一开始也是第一反应是用case when但是发现并不好使. 问题呢,说得高大上一点:动态指定要修改的 ...

  5. 开源的轻量级JSON存储Kinto介绍

    本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2015/12/introducing-kinto Kinto是个提供了同步与分片功能的 ...

  6. 如何使用VB编写Excel的COM组件

    1 新建工程中选择"外接程序",点击打开之后右侧的属性窗口即显示为MyAddIn工程.(注意如果你使用的是VB精简版的没有"外接程序"的选项,请下载完整版的) ...

  7. 《Linux Device Drivers》第八章 分配内存——note

    本章主要介绍Linux内核的内存管理. kmalloc函数的内幕 不正确所获取的内存空间清零 分配的区域在物理内存中也是连续的 flags參数 <linux/slab.h> <lin ...

  8. Matlab得到二值图像中最大连通区域

    有时候要将二值化图像中最大的连通域保存下来.以下函数提供了一种方法: %function [img]=maxLianTongYu(I):求图像中最大的连通域 %输入:I 输入图像 %输出:img 仅包 ...

  9. Erlang下与其他程序和语言的通信机制(3)

    这部分主要聊C Nodes.首先我们需要了解下Erlang的分布式系统: 分布式Erlang: 分布式Erlang是由一组相互通信的Erlang运行时组成,其中每一个运行时称为一个Node.不同Nod ...

  10. 转 java synchronized详解

    转自 http://www.cnblogs.com/GnagWang/archive/2011/02/27/1966606.html Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能 ...