实时对讲:

MainService.java

public class MainService extends Service {

private ServiceBinder sBinder = new ServiceBinder();//服务绑定器

private AlertDialog dialog = null;

private boolean isPaused = false;//判断本身是不是可见

private boolean isRemoteUserClosed = false; //是否远程用户已经关闭了通话。

private SharedPreferences pre = null;

private SharedPreferences.Editor editor = null;

private WifiManager wifiManager = null;

private ServiceBroadcastReceiver receiver = null;

public InetAddress localInetAddress = null;

private String localIp = null;

private byte[] localIpBytes = null;

private byte[] regBuffer = new byte[Constant.bufferSize];//本机网络注册交互指令

private byte[] msgSendBuffer = new byte[Constant.bufferSize];//信息发送交互

private byte[] fileSendBuffer = new byte[Constant.bufferSize];//文件发送交互指令

private byte[] talkCmdBuffer = new byte[Constant.bufferSize];//通话指令

private static Person me = null;//用来保存自身的相关信息

private CommunicationBridge comBridge = null;//通讯与协议解析模块

@Override

public void onStart(Intent intent, int startId) {

initCmdBuffer();//初始化指令缓存

wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);

new CheckNetConnectivity().start();//侦测网络状态,获取IP地址

comBridge = new CommunicationBridge();//启动socket连接

comBridge.start();

pre = PreferenceManager.getDefaultSharedPreferences(this);

editor = pre.edit();

regBroadcastReceiver();//注册广播接收器

getMyInfomation();//获得自身信息

new UpdateMe().start();//向网络发送心跳包,并注册

new CheckUserOnline().start();//检查用户列表是否有超时用户

sendPersonHasChangedBroadcast();//通知有新用户加入或退出

System.out.println("Service started...");

}

//更新通话命令用户数据

System.arraycopy(ByteAndInt.int2ByteArray(myId), 0, talkCmdBuffer, 6, 4);

System.arraycopy(ByteAndInt.int2ByteArray(iconId), 0, talkCmdBuffer, 10, 4);

for(int i=14;i<44;i++)talkCmdBuffer[i] = 0;//把原来的昵称内容清空

System.arraycopy(nickeNameBytes, 0, talkCmdBuffer, 14, nickeNameBytes.length);

for(int i=0;i

System.arraycopy(Constant.pkgHead, 0,

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐