226 lines
8.6 KiB
Java
226 lines
8.6 KiB
Java
package com.xixun.communicate;
|
||
|
||
import android.location.Criteria;
|
||
import android.location.Location;
|
||
|
||
import com.xixun.display.MainActivity;
|
||
import com.xixun.display.MyLog;
|
||
import com.xixun.display.MyService;
|
||
|
||
import java.net.DatagramPacket;
|
||
import java.net.DatagramSocket;
|
||
import java.net.InetAddress;
|
||
import java.net.InetSocketAddress;
|
||
import java.net.UnknownHostException;
|
||
|
||
/**
|
||
* Created by Administrator on 2018/08/09.
|
||
* 163.53.193.72
|
||
*/
|
||
|
||
public class Report
|
||
{
|
||
LedCardCommunication ledCardCommunication=null;
|
||
MyService ms=null;
|
||
String strCardID=null;
|
||
String strDoMain=null;
|
||
int iPort=0;
|
||
|
||
String strIpAddress=null;
|
||
|
||
|
||
DatagramSocket udpSendSocket =null;
|
||
|
||
public Report(LedCardCommunication ledCardCommunication,String strDoMain,int iPort)
|
||
{ this.ledCardCommunication=ledCardCommunication;
|
||
this.strDoMain=strDoMain;
|
||
this.iPort=iPort;
|
||
|
||
if (ledCardCommunication==null) return;
|
||
|
||
if (strDoMain==null) return;
|
||
if (strDoMain.length()<"w.c".length()) return;
|
||
|
||
ms=ledCardCommunication.clientsManage.ms;
|
||
this.strCardID=ledCardCommunication.Get_DisplayID();
|
||
|
||
|
||
new Thread() {
|
||
public void run() {
|
||
Process();
|
||
}
|
||
}.start();
|
||
}
|
||
|
||
private void Process()
|
||
{ Criteria c = new Criteria();//Criteria类是设置定位的标准信息(系统会根据你的要求,匹配最适合你的定位供应商),一个定位的辅助信息的类
|
||
|
||
|
||
{
|
||
c.setPowerRequirement(Criteria.POWER_LOW);//设置低耗电
|
||
c.setAltitudeRequired(true);//设置需要海拔
|
||
c.setBearingAccuracy(Criteria.ACCURACY_COARSE);//设置COARSE精度标准
|
||
c.setAccuracy(Criteria.ACCURACY_LOW);//设置低精度
|
||
//... Criteria 还有其他属性,就不一一介绍了
|
||
Location best = LocationUtils.getBestLocation(ms, c);
|
||
|
||
if (best == null) {
|
||
MyLog.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Best location is null");
|
||
} else {
|
||
MyLog.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!best location: lat==" + best.getLatitude() + " lng==" + best.getLongitude());
|
||
}
|
||
|
||
|
||
Location net = LocationUtils.getNetWorkLocation(ms);
|
||
if (net == null) {
|
||
MyLog.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!net location is null");
|
||
} else {
|
||
MyLog.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!net location: lat==" + net.getLatitude() + " lng==" + net.getLongitude());
|
||
}
|
||
|
||
}
|
||
|
||
while(NeedExit()==false) {
|
||
|
||
try {
|
||
Thread.sleep(5*1000); // sleep(1000); // 第一次时,先等待其他服务端口套接字线程准备好。
|
||
|
||
try{
|
||
InetAddress x = java.net.InetAddress.getByName(strDoMain);
|
||
strIpAddress = x.getHostAddress();//得到字符串形式的ip地址.
|
||
|
||
if (strIpAddress==null) continue;
|
||
if (strIpAddress.length()<"1.1.1.1".length()) continue;
|
||
|
||
MyLog.i(strDoMain+" IP:"+strIpAddress);
|
||
|
||
//strIpAddress="192.168.1.255";//112";
|
||
}
|
||
catch (UnknownHostException e)
|
||
{ //e.printStackTrace();
|
||
//MyLog.i("域名解析出错");
|
||
continue;
|
||
}
|
||
|
||
udpSendSocket = new DatagramSocket(null);
|
||
udpSendSocket.setReuseAddress(true);
|
||
udpSendSocket.bind(new InetSocketAddress(iPort));
|
||
|
||
String staAlias=null;
|
||
int iCounter=0;
|
||
|
||
while (NeedExit()==false)
|
||
{
|
||
Location best = LocationUtils.getBestLocation(ms, c);
|
||
|
||
iCounter++;
|
||
if (iCounter>10)
|
||
{
|
||
iCounter=0;
|
||
staAlias=null;
|
||
}
|
||
if (staAlias==null)
|
||
{
|
||
staAlias=ledCardCommunication.GetAlias();
|
||
}
|
||
|
||
//if (best != null)
|
||
{
|
||
String str =
|
||
"{"
|
||
+ "\"CardID\":\"" + strCardID
|
||
+ "\",\"Alias\":\"" + staAlias
|
||
+ "\",\"Display\":\"" + (ledCardCommunication.GetSecreenOn()?"ON":"OFF")
|
||
+ "\",\"PlayProgram\":\"" + ledCardCommunication.GetPlayProgram()
|
||
+ "\",\"Latitude\":\"" + ((best != null) ? best.getLatitude() :null)
|
||
+ "\",\"Longitude\":\"" + ((best != null) ? best.getLongitude() :null)
|
||
+ "\",\"Speed\":\"" + ((best != null) ? best.getSpeed() :null)
|
||
|
||
+"\"}";
|
||
byte sendDataBuffer[] = str.getBytes();
|
||
DatagramPacket sendPacket = new DatagramPacket(sendDataBuffer, sendDataBuffer.length, InetAddress.getByName(strIpAddress), iPort);
|
||
udpSendSocket.send(sendPacket);
|
||
MyLog.i( str );
|
||
}
|
||
|
||
|
||
Thread.sleep(15*1000);
|
||
}
|
||
}catch(Exception e){
|
||
MyLog.i(Thread.currentThread().getStackTrace()[2].getFileName() + "-->"
|
||
+ "Function: " +Thread.currentThread().getStackTrace()[2].getMethodName() + "-->"
|
||
+ "Line" +Thread.currentThread().getStackTrace()[2].getLineNumber() + ":\r\n"
|
||
+ " Error:" + e.getMessage() + "\r\n\r\n"
|
||
);
|
||
}finally {
|
||
if (udpSendSocket!=null) {
|
||
udpSendSocket.close();
|
||
udpSendSocket=null;
|
||
}
|
||
}
|
||
}
|
||
Exit();
|
||
}
|
||
|
||
/**
|
||
* 通过GPS获取定位信息
|
||
|
||
public void getGPSLocation() {
|
||
Location gps = LocationUtils.getGPSLocation(this);
|
||
if (gps == null) {
|
||
//设置定位监听,因为GPS定位,第一次进来可能获取不到,通过设置监听,可以在有效的时间范围内获取定位信息
|
||
LocationUtils.addLocationListener(context, LocationManager.GPS_PROVIDER, new LocationUtils.ILocationListener() {
|
||
@Override
|
||
public void onSuccessLocation(Location location) {
|
||
if (location != null) {
|
||
Toast.makeText(MainActivity.this, "gps onSuccessLocation location: lat==" + location.getLatitude() + " lng==" + location.getLongitude(), Toast.LENGTH_SHORT).show();
|
||
} else {
|
||
Toast.makeText(MainActivity.this, "gps location is null", Toast.LENGTH_SHORT).show();
|
||
}
|
||
}
|
||
});
|
||
} else {
|
||
Toast.makeText(this, "gps location: lat==" + gps.getLatitude() + " lng==" + gps.getLongitude(), Toast.LENGTH_SHORT).show();
|
||
}
|
||
}*/
|
||
|
||
/**
|
||
* 通过网络等获取定位信息
|
||
|
||
private void getNetworkLocation() {
|
||
Location net = LocationUtils.getNetWorkLocation(Activity);
|
||
if (net == null) {
|
||
Toast.makeText(this, "net location is null", Toast.LENGTH_SHORT).show();
|
||
} else {
|
||
Toast.makeText(this, "network location: lat==" + net.getLatitude() + " lng==" + net.getLongitude(), Toast.LENGTH_SHORT).show();
|
||
}
|
||
}*/
|
||
|
||
/**
|
||
* 采用最好的方式获取定位信息
|
||
|
||
private void getBestLocation() {
|
||
Criteria c = new Criteria();//Criteria类是设置定位的标准信息(系统会根据你的要求,匹配最适合你的定位供应商),一个定位的辅助信息的类
|
||
c.setPowerRequirement(Criteria.POWER_LOW);//设置低耗电
|
||
c.setAltitudeRequired(true);//设置需要海拔
|
||
c.setBearingAccuracy(Criteria.ACCURACY_COARSE);//设置COARSE精度标准
|
||
c.setAccuracy(Criteria.ACCURACY_LOW);//设置低精度
|
||
//... Criteria 还有其他属性,就不一一介绍了
|
||
Location best = LocationUtils.getBestLocation(Activity, c);
|
||
if (best == null) {
|
||
Toast.makeText(this, " best location is null", Toast.LENGTH_SHORT).show();
|
||
} else {
|
||
Toast.makeText(this, "best location: lat==" + best.getLatitude() + " lng==" + best.getLongitude(), Toast.LENGTH_SHORT).show();
|
||
}
|
||
}
|
||
*/
|
||
|
||
boolean bNeedExit=false;
|
||
public boolean NeedExit() { return bNeedExit; }
|
||
|
||
public void Exit()
|
||
{ if (NeedExit()) return;
|
||
bNeedExit=true;
|
||
}
|
||
}
|