From: snickersun Date: Tue, 11 Feb 2020 11:42:22 +0000 (+0800) Subject: 1. 添加SMS短信收发功能,可以开始增加短信指令了。 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=d8abf50e608444823d34ca655fcfb241c7e62783;p=protocol_srv.git 1. 添加SMS短信收发功能,可以开始增加短信指令了。 2、SOS指令中的AP10改为即时发送,然后再进行电话拨号。 --- diff --git a/app/src/main/java/com/enqualcomm/support/CoreService.java b/app/src/main/java/com/enqualcomm/support/CoreService.java index 825ed15a..6c294fc9 100644 --- a/app/src/main/java/com/enqualcomm/support/CoreService.java +++ b/app/src/main/java/com/enqualcomm/support/CoreService.java @@ -19,6 +19,7 @@ import android.util.Log; import android.widget.Toast; import com.enqualcomm.support.bean.ICLocation; +import com.enqualcomm.support.utils.DeviceInfoUtil; import com.enqualcomm.support.utils.ServiceUtil; import com.ic.jni.ICJniUtils; import com.enqualcomm.support.Constants; @@ -115,31 +116,9 @@ public class CoreService extends Service { private static boolean is_wifi_network_ok = false; - + private static ICSmsManager smsManager=null; public String getServerAlive(){ - int ppg=ICJniUtils.getPPG(); - SimSignalUtil sim=SimSignalUtil.getInstance(this); - return new StringBuilder() - .append(TimeUtil.getSystemTime3()) - .append(SimSignalUtil.hasSimCard(this)?" SIM ":" NoSIM ") - .append(sim.getNetworkType()==SimSignalUtil.IS_2G?"2G":(sim.getNetworkType()==SimSignalUtil.IS_3G)?"3G":(sim.getNetworkType()==SimSignalUtil.IS_4G?"4G":"unknown")) - .append(" [").append(runtime.getSignalStrength()+100).append(",Mini:").append(SimSignalUtil.getMinSignalStrength(sim.getNetworkType())).append("]") - .append("\n Connecttion ").append(this.connection.isServerConnected()) - .append(" KeepAlive ").append(KeepAlive.isConnected) - .append("\n ServerConnected is ").append(runtime.isServerProtocolConnected()) - .append(" \n Bat ").append(runtime.getBattery()) - .append(" StepCount ").append(runtime.getTotalStepCount()) - .append( "\n Working Mode ").append(runtime.getLocationInstance().getWorkingMod()) - .append(" \n Location Cycle ").append(runtime.getLocationInstance().getLocation_cycle()) - .append(" \n LocationType ").append(runtime.getLocationInstance().getLocationType()) - .append(" at ").append(runtime.getLocationInstance().getLocationTime()) - .append(" \n PPGTestCycle ").append(runtime.getPpgTestCycle()) - .append("\n PPGStarted ").append(ICJniUtils.isPPGStarted()) - .append(",weared ").append(ICJniUtils.isWeared()) - .append(",ppg ").append(ppg) - .append(",bph ").append(ICJniUtils.getHighBloodPressure()) - .append(",bpl ").append(ICJniUtils.getLowBloodPressure()) - .toString(); + return DeviceInfoUtil.getDeviceInfo(runtime); } private BroadcastReceiver AtCallbackBroadcastReceiver = new BroadcastReceiver() { @@ -211,7 +190,9 @@ public class CoreService extends Service { runtime.setAlarmType(false,runtime.getBatteryLow(),true,false); //trigger AP10 报警定位 - CoreService.this.locationClient.triggerSOSLocationProcess(); +// CoreService.this.locationClient.triggerSOSLocationProcess(); + connection.send(protocolAPIHelper.genStringMessage("AP10",protocolAPIHelper.AP10(runtime))); + //开启紧急定位模式,GPS 优先1分钟一次定位,持续5分钟 runtime.getLocationInstance().setWorkingMod(CUSTOM_MOD); runtime.getLocationInstance().setLocation_cycle(1); @@ -224,7 +205,7 @@ public class CoreService extends Service { setEmegencyLocationSTOPAlarm(5); //5秒后开始拨打电话 - Observable.timer(5000L, TimeUnit.MILLISECONDS).subscribe(new Action1() { + Observable.timer(500L, TimeUnit.MILLISECONDS).subscribe(new Action1() { public void call(Long param1Long) { trigger_SOS_Call(); } @@ -493,6 +474,8 @@ public class CoreService extends Service { } + smsManager= new ICSmsManager(runtime); + //保证获取正确的计步数据及其他参数初始化 loadStepCount(); loadSettings(); diff --git a/app/src/main/java/com/enqualcomm/support/ICSmsManager.java b/app/src/main/java/com/enqualcomm/support/ICSmsManager.java new file mode 100644 index 00000000..fb5a3769 --- /dev/null +++ b/app/src/main/java/com/enqualcomm/support/ICSmsManager.java @@ -0,0 +1,150 @@ +package com.enqualcomm.support; + +import android.app.Activity; +import android.app.PendingIntent; +import android.content.BroadcastReceiver; +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.database.Cursor; +import android.net.Uri; +import android.os.SystemClock; +import android.telephony.SmsManager; +import android.telephony.SmsMessage; +import android.widget.Toast; + +import com.enqualcomm.support.bean.Runtime; +import com.enqualcomm.support.utils.DeviceInfoUtil; +import com.enqualcomm.support.utils.Logger; + +import java.util.ArrayList; +import java.util.Iterator; + + +public class ICSmsManager { + private static String mNumber; + private static long preTimeMillis; + private Uri SMS_INBOX = Uri.parse("content://sms/inbox"); + private Context mContext = null; + Runtime runtime; +// ArrayList smsInfoList; + ICSmsManager.SmsReceiver smsReceiver; +// ArrayList source; + + public ICSmsManager( Runtime _runtime) { +// this.source = src; + this.runtime = _runtime; + this.mContext = runtime.getContextProxy().context; + this.smsReceiver = new ICSmsManager.SmsReceiver(); + IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED"); + intentFilter.setPriority(2147483647); + this.mContext.registerReceiver(this.smsReceiver, intentFilter); + + + //处理返回的发送状态 + String SENT_SMS_ACTION = "SENT_SMS_ACTION"; + Intent sentIntent = new Intent(SENT_SMS_ACTION); + PendingIntent sentPI = PendingIntent.getBroadcast(mContext, 0, sentIntent, + 0); +// register the Broadcast Receivers + mContext.registerReceiver(new BroadcastReceiver() { + @Override + public void onReceive(Context _context, Intent _intent) { + switch (getResultCode()) { + case Activity.RESULT_OK: + Toast.makeText(mContext, + "短信发送成功", Toast.LENGTH_SHORT) + .show(); + break; + case SmsManager.RESULT_ERROR_GENERIC_FAILURE: + break; + case SmsManager.RESULT_ERROR_RADIO_OFF: + break; + case SmsManager.RESULT_ERROR_NULL_PDU: + break; + } + } + }, new IntentFilter(SENT_SMS_ACTION)); + + + //处理返回的接收状态 + String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION"; +// create the deilverIntent parameter + Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION); + PendingIntent deliverPI = PendingIntent.getBroadcast(mContext, 0, + deliverIntent, 0); + mContext.registerReceiver(new BroadcastReceiver() { + @Override + public void onReceive(Context _context, Intent _intent) { + Toast.makeText(mContext, + "收信人已经成功接收", Toast.LENGTH_SHORT) + .show(); + } + }, new IntentFilter(DELIVERED_SMS_ACTION)); + + + } + + public void sendSMS(String phonenumber, String msg) { + android.telephony.SmsManager smsManager = android.telephony.SmsManager.getDefault(); + Iterator msgit = smsManager.divideMessage(msg).iterator(); + + while(msgit.hasNext()) { + String message= (String)msgit.next(); + Logger.i("reply message to "+phonenumber+", "+message); + smsManager.sendTextMessage(phonenumber, (String)null,message, (PendingIntent)null, (PendingIntent)null); + } + } + + private boolean isAdminNumber(String phoneNumb){ + + return true; + } + public void handleSMS_CMD(String phonenumber, String sms){ + if (isAdminNumber(phonenumber)) { + if (sms.startsWith("GetDeviceInfo")) { + sendSMS(phonenumber,DeviceInfoUtil.getDeviceInfo(runtime)); + } + + } + } + + public class SmsReceiver extends BroadcastReceiver { + + public SmsReceiver() { + } + + public void onReceive(Context context, Intent intent) { + long currenttime = System.currentTimeMillis(); + if (currenttime - ICSmsManager.preTimeMillis > 30000L) { + ICSmsManager.preTimeMillis = currenttime; + (new Thread(new Runnable() { + public void run() { + SystemClock.sleep(3000L); + if(intent == null || intent.getAction() == null ) return; + + //长短信会被分拆送来,因此可能会有多个PDU。Protocol Description Unit是短信的工业标准。  + Object[] pduArray = (Object[])intent.getExtras().get("pdus"); + Logger.i("pdu number=" + pduArray.length); + String message = ""; + String from = null; + for(int i = 0 ; i < pduArray.length; i ++){ + SmsMessage sms = SmsMessage.createFromPdu((byte[])pduArray[i]);//将PDU转换为SmsMessage格式 + Logger.i("From : " + sms.getDisplayOriginatingAddress()); + Logger.i("SMS : " + sms.getDisplayMessageBody()); + from = sms.getDisplayOriginatingAddress(); + message += sms.getDisplayMessageBody(); + } + Logger.i("收到" + from + "短信:" + message); +// Toast.makeText(context, "收到" + from + "短信:" + message, Toast.LENGTH_LONG).show(); + handleSMS_CMD(from,message); + } + })).start(); + } + + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/enqualcomm/support/service/Deliver.java b/app/src/main/java/com/enqualcomm/support/service/Deliver.java index 36627df9..a41bcab5 100644 --- a/app/src/main/java/com/enqualcomm/support/service/Deliver.java +++ b/app/src/main/java/com/enqualcomm/support/service/Deliver.java @@ -12,6 +12,7 @@ import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiManager; import android.os.Build; import android.os.Handler; +import android.os.Message; import android.os.Parcelable; import android.os.PowerManager; import android.os.SystemClock; @@ -98,9 +99,32 @@ public class Deliver extends AbstractConnectionService { private boolean wakeLockWifiSet = false; private String wifiDataForCm; - + + private boolean wifiEnabled; - + + + private static Handler mSendMSGHandler=new Handler(new Handler.Callback() { + @Override + public boolean handleMessage(Message message) { + + switch (message.what){ + case 1: + + new Thread(new Runnable() { + @Override + public void run() { + sendThread(); + } + }).start(); + break; + default: + break; + } + return false; + } + }); + static { } @@ -127,9 +151,16 @@ public class Deliver extends AbstractConnectionService { } return ret; } - public static void triggerSendThread(){ + public static void triggerSendThread() { + + mSendMSGHandler.sendEmptyMessage(1); + } + + public static void sendThread(){ if (mRuntime.getUseQueue()) { - lock.lock(); + Logger.i("queue locked "+mLock.isLocked()); + if(mLock.isLocked()) return; + mLock.lock(); try { String str; @@ -160,8 +191,8 @@ public class Deliver extends AbstractConnectionService { } Logger.i("send cached cmd: \n"+str); }finally { - if(lock!=null && lock.isLocked()) - lock.unlock(); + if(mLock!=null && mLock.isLocked()) + mLock.unlock(); } } @@ -399,95 +430,105 @@ public static void sendLocationMSG( String Msg){ } alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, l + 10000L, pendingIntent); } - + class ConWifiReceiver extends BroadcastReceiver { - public void onReceive(final Context context, Intent param1Intent) { - String str = param1Intent.getAction(); - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append(" receive action="); - stringBuilder.append(str); - stringBuilder.append(" isAppSetWifi="); - stringBuilder.append(isAppSetWifi); - Logger.i(stringBuilder.toString()); - if (str.equals("android.net.conn.CONNECTIVITY_CHANGE")) { - if (isAppSetWifi == 0) - return; - if (isAppSetWifi == 1) { -// Deliver.access$402(0); + ConWifiReceiver() { + } + + public void onReceive(final Context var1, Intent var2) { + String var3 = var2.getAction(); + StringBuilder var4 = new StringBuilder(); + var4.append(" receive action="); + var4.append(var3); + var4.append(" isAppSetWifi="); + var4.append(Deliver.isAppSetWifi); + Logger.i(var4.toString()); + if (var3.equals("android.net.conn.CONNECTIVITY_CHANGE")) { + if (Deliver.isAppSetWifi == 0) { + return; + } + + if (Deliver.isAppSetWifi == 1) { + Deliver.isAppSetWifi = 0; if (Deliver.this.delayHandler != null) { Deliver.this.delayHandler.removeCallbacks(Deliver.this.delayTh); -// Deliver.access$602(Deliver.this, null); - } - } - WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); - if (((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE)).getNetworkInfo(1).isConnected()) { + Deliver.this.delayHandler = null; + } + } + + WifiManager var5 = (WifiManager)var1.getSystemService(Context.WIFI_SERVICE); + if (((ConnectivityManager)var1.getSystemService(Context.CONNECTIVITY_SERVICE)).getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) { Logger.i("连接成功"); -// Deliver.access$402(0); + Deliver.isAppSetWifi = 0; Deliver.haveSendH42 = true; - Deliver.this.mConnection.connect(Deliver.this.mRuntime.getSrvIP(), Deliver.this.mRuntime.getPort()); + Deliver.this.mConnection.connect(Deliver.this.mRuntime.getHost(), Deliver.this.mRuntime.getPort()); if (Deliver.this.delayHandler != null) { Deliver.this.delayHandler.removeCallbacks(Deliver.this.delayTh); -// Deliver.access$602(Deliver.this, null); + Deliver.this.delayHandler = null; } - context.unregisterReceiver(Deliver.this.mMyWifiReceiver); -// Deliver.access$502(Deliver.this, null); -// Deliver.access$202(Deliver.this, false); + + var1.unregisterReceiver(Deliver.this.mMyWifiReceiver); + Deliver.this.mMyWifiReceiver = null; + Deliver.this.wakeLockWifiSet = false; Deliver.this.releaseOneWakeLock(); - Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime); - return; - } - stringBuilder = new StringBuilder(); - stringBuilder.append("连接失败 222 delayHandler="); - stringBuilder.append(Deliver.this.delayHandler); - Logger.i(stringBuilder.toString()); -// Deliver.access$402(2); - wifiManager.reconnect(); - if (Deliver.this.delayHandler == null) { - Deliver.this.delayHandler =new Handler(); - Deliver.this.delayTh= new Runnable() { - public void run() { - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append("连接失败 超时 wifiEnabled="); - stringBuilder.append(wifiEnabled); - Logger.i(stringBuilder.toString()); - if (isAppSetWifi == 1) - return; -// Deliver.access$402(0); - context.unregisterReceiver(mMyWifiReceiver); - mMyWifiReceiver=null; - WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); - if (((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE)).getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) { + Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime); + } else { + StringBuilder var6 = new StringBuilder(); + var6.append("连接失败 222 delayHandler="); + var6.append(Deliver.this.delayHandler); + Logger.i(var6.toString()); + Deliver.isAppSetWifi = 2; + var5.reconnect(); + if (Deliver.this.delayHandler == null) { + Deliver.this.delayHandler = new Handler(); + Deliver.this.delayTh = new Runnable() { + public void run() { + StringBuilder var1x = new StringBuilder(); + var1x.append("连接失败 超时 wifiEnabled="); + var1x.append(Deliver.this.wifiEnabled); + Logger.i(var1x.toString()); + if (Deliver.isAppSetWifi != 1) { + Deliver.isAppSetWifi = 0; + var1.unregisterReceiver(Deliver.this.mMyWifiReceiver); + Deliver.this.mMyWifiReceiver = null; + WifiManager var3 = (WifiManager)var1.getSystemService(Context.WIFI_SERVICE); + if (((ConnectivityManager)var1.getSystemService(Context.CONNECTIVITY_SERVICE)).getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) { Logger.i("连接成功 1"); Deliver.haveSendH42 = true; - mConnection.connect(mRuntime.getSrvIP(), mRuntime.getPort()); -// Deliver.access$202(ConWifiReceiver.this.this$0, false); - releaseOneWakeLock(); - Deliver.WakeLockForGetWifiList(mRuntime); + Deliver.this.mConnection.connect(Deliver.this.mRuntime.getHost(), Deliver.this.mRuntime.getPort()); + Deliver.this.wakeLockWifiSet = false; + Deliver.this.releaseOneWakeLock(); + Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime); } else { - int i = wifiManager.getConnectionInfo().getNetworkId(); - if (i != -1) { - wifiManager.disableNetwork(i); -// ServiceUtil.offerQueue(API.H42(ConWifiReceiver.this.this$0.mRuntime, "3")); -// Deliver.access$202(ConWifiReceiver.this.this$0, false); - releaseOneWakeLock(); - WakeLockForGetWifiList(mRuntime); + int var2 = var3.getConnectionInfo().getNetworkId(); + if (var2 != -1) { + var3.disableNetwork(var2); +// ServiceUtil.offerQueue(API.H42(Deliver.this.mRuntime, "3")); + Deliver.this.wakeLockWifiSet = false; + Deliver.this.releaseOneWakeLock(); + Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime); } else { Logger.i("连接失败 2-2"); -// ServiceUtil.offerQueue(API.H42(ConWifiReceiver.this.this$0.mRuntime, "3")); -// Deliver.access$202(ConWifiReceiver.this.this$0, false); - releaseOneWakeLock(); - Deliver.WakeLockForGetWifiList(mRuntime); +// ServiceUtil.offerQueue(API.H42(Deliver.this.mRuntime, "3")); + Deliver.this.wakeLockWifiSet = false; + Deliver.this.releaseOneWakeLock(); + Deliver.WifiListWakeLock = Deliver.WakeLockForGetWifiList(Deliver.this.mRuntime); + } + + if (!Deliver.this.wifiEnabled) { + var3.setWifiEnabled(false); } - if (!wifiEnabled) - wifiManager.setWifiEnabled(false); } -// Deliver.access$602(ConWifiReceiver.this.this$0, null); + + Deliver.this.delayHandler = null; } } - ; - Deliver.this.delayHandler.postDelayed(Deliver.this.delayTh, 30000L); - } - } + }; + Deliver.this.delayHandler.postDelayed(Deliver.this.delayTh, 30000L); + } + } + } + } } diff --git a/app/src/main/java/com/enqualcomm/support/service/KeepAlive.java b/app/src/main/java/com/enqualcomm/support/service/KeepAlive.java index 056b5006..c61eb8a0 100644 --- a/app/src/main/java/com/enqualcomm/support/service/KeepAlive.java +++ b/app/src/main/java/com/enqualcomm/support/service/KeepAlive.java @@ -208,6 +208,7 @@ public class KeepAlive extends AbstractConnectionService { paramRuntime.setServerProtocolConnected(true); paramRuntime.getContextProxy().sendBroadcast(isConnected); LauncherCtrl.getInstance(this.mContext).setStatusBarIcon("server_connected", STATUS_BAR_STATE_SERVER_CONNECTED_ON); +// Deliver.triggerSendThread(); //链接上就尝试清除 buffer中的数据 } return false; } diff --git a/app/src/main/java/com/enqualcomm/support/utils/DeviceInfoUtil.java b/app/src/main/java/com/enqualcomm/support/utils/DeviceInfoUtil.java index 26552362..a87035a1 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/DeviceInfoUtil.java +++ b/app/src/main/java/com/enqualcomm/support/utils/DeviceInfoUtil.java @@ -9,6 +9,9 @@ import android.provider.Settings; import android.telephony.TelephonyManager; import com.enqualcomm.support.bean.StepCount; +import com.enqualcomm.support.bean.Runtime; +import com.enqualcomm.support.service.KeepAlive; +import com.ic.jni.ICJniUtils; import java.io.FileInputStream; import java.util.ArrayList; @@ -138,6 +141,32 @@ public class DeviceInfoUtil { } + public static String getDeviceInfo(Runtime runtime){ + + int ppg= ICJniUtils.getPPG(); + SimSignalUtil sim=SimSignalUtil.getInstance(runtime.getContextProxy().context); + return new StringBuilder() + .append(TimeUtil.getSystemTime3()) + .append(SimSignalUtil.hasSimCard(runtime.getContextProxy().context)?" SIM ":" NoSIM ") + .append(sim.getNetworkType()==SimSignalUtil.IS_2G?"2G":(sim.getNetworkType()==SimSignalUtil.IS_3G)?"3G":(sim.getNetworkType()==SimSignalUtil.IS_4G?"4G":"unknown")) + .append(" [").append(runtime.getSignalStrength()+100).append(",Mini:").append(SimSignalUtil.getMinSignalStrength(sim.getNetworkType())).append("]") + .append("\n KeepAlive ").append(KeepAlive.isConnected) + .append("\n ServerConnected is ").append(runtime.isServerProtocolConnected()) + .append(" \n Bat ").append(runtime.getBattery()) + .append(" StepCount ").append(runtime.getTotalStepCount()) + .append( "\n Working Mode ").append(runtime.getLocationInstance().getWorkingMod()) + .append(" \n Location Cycle ").append(runtime.getLocationInstance().getLocation_cycle()) + .append(" \n LocationType ").append(runtime.getLocationInstance().getLocationType()) + .append(" at ").append(runtime.getLocationInstance().getLocationTime()) + .append(" \n PPGTestCycle ").append(runtime.getPpgTestCycle()) + .append("\n PPGStarted ").append(ICJniUtils.isPPGStarted()) + .append(",weared ").append(ICJniUtils.isWeared()) + .append(",ppg ").append(ppg) + .append(",bph ").append(ICJniUtils.getHighBloodPressure()) + .append(",bpl ").append(ICJniUtils.getLowBloodPressure()) + .toString(); + } + public static void setLockSimInfo(Context paramContext) { Settings.System.putInt(paramContext.getContentResolver(), "com.eqc.watch.launcher.SimIsBlocked", 1); } } diff --git a/app/version_code.properties b/app/version_code.properties index 651ea5bf..c9bc6a94 100644 --- a/app/version_code.properties +++ b/app/version_code.properties @@ -1,2 +1,2 @@ -#Sun Feb 09 01:48:12 CST 2020 -VERSION_CODE=347 +#Mon Feb 10 23:47:07 CST 2020 +VERSION_CODE=348