From: snicker Date: Tue, 28 Apr 2020 19:15:18 +0000 (+0800) Subject: 添加SMS CMD X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=7988f73d37dc72b7866f1da606b34151adfc8cd4;p=icsupport.git 添加SMS CMD #reset#、 #sos=13788334455;13877664433;13988776655#、 #apn#=check#, #status#、 #PW=123456# 、 #PW=non#、 #host#=www.xxx.com,8080# --- diff --git a/app/src/main/java/com/enqualcomm/support/Config.java b/app/src/main/java/com/enqualcomm/support/Config.java index 66370acf..6a02d909 100644 --- a/app/src/main/java/com/enqualcomm/support/Config.java +++ b/app/src/main/java/com/enqualcomm/support/Config.java @@ -93,7 +93,17 @@ public class Config { final static String KeyWiFiPasswd="WiFiPWD"; final static String KeyWiFiEncyptType="WiFiEncryptType"; + final static String KeySMSPassword="SMSPWD"; + final static String DefaultSMSPassword="non"; + + public static String getSMSPwd(Context context){ + return SharPreferenceUtil.getPrefString(context,KeySMSPassword,DefaultSMSPassword); + } + + public static void setSMSPwd(Context context,String smsPWD){ + SharPreferenceUtil.setPrefString(context,KeySMSPassword,smsPWD); + } public static boolean getIsL03tracker(){ boolean ret=getSystemProperties("persist.sys.isL03tracker").toLowerCase().equals("true"); return ret; diff --git a/app/src/main/java/com/enqualcomm/support/ICSmsManager.java b/app/src/main/java/com/enqualcomm/support/ICSmsManager.java index ebaa9741..6a598d9d 100644 --- a/app/src/main/java/com/enqualcomm/support/ICSmsManager.java +++ b/app/src/main/java/com/enqualcomm/support/ICSmsManager.java @@ -15,6 +15,7 @@ import android.telephony.SmsManager; import android.telephony.SmsMessage; import android.widget.Toast; +import com.enqualcomm.support.bean.Contact; import com.enqualcomm.support.bean.ICLocation; import com.enqualcomm.support.bean.Runtime; import com.enqualcomm.support.service.Deliver; @@ -122,11 +123,35 @@ public class ICSmsManager { //回复 //IMEI: 353503535035350 //SW: L02_20200208_V1 + + + public String RemoveEncrypedHeader(String sms){ + String smsPWD=Config.getSMSPwd(mContext); + if(!smsPWD.equals("none")){ + if (!sms.startsWith(smsPWD)){ + ICLogger.i("开头不是密码!"); + }else{ + //ICLogger.i("开头不是密码!"); + return sms; + } + }else{ + return sms; + } + return sms; + } public boolean handleSMS_CMD(String phonenumber, String sms){ if (isAdminNumber(phonenumber)) { + String ENCRYPED_HEADER = Config.getSMSPwd(mContext); + if (ENCRYPED_HEADER.equals(Config.DefaultSMSPassword)) { + ENCRYPED_HEADER = ""; + } + + if (sms.equals(ENCRYPED_HEADER + "#logctl#=upload,all")){ + sms=ENCRYPED_HEADER+"#logctl#=upload,SDLog:Android/ic"; + } if (sms == null || sms.isEmpty()) return false; - if (sms.startsWith("#apn#=") && sms.endsWith("#")) { + if (sms.startsWith(ENCRYPED_HEADER+"#apn#=") && sms.endsWith("#")) { String[] tmp = sms.split("#"); if (tmp.length == 3) { String[] apnvalues = tmp[2].replace("=", "").split(","); @@ -159,6 +184,11 @@ public class ICSmsManager { String apnstr = APNUtil.getCurrentAPN(mContext); sendSMS(phonenumber, apnstr); + }else if (apnvalues[0].equals("check")) { + String mcc=runtime.getLocationInstance().getMCC(); + String mnc=runtime.getLocationInstance().getMNC(); + String apnstr = APNUtil.checkAPN(mcc,mnc,mContext); + sendSMS(phonenumber, apnstr); } else { sendSMS(phonenumber, "apn cmd format error!"); } @@ -170,16 +200,17 @@ public class ICSmsManager { sendSMS(phonenumber, "apn cmd format error!"); } - } else if (sms.startsWith("#deviceinfo#")) { + } else if (sms.startsWith(ENCRYPED_HEADER+"#deviceinfo#")) { ICLogger.i("SMS " + sms + " reply " + DeviceInfoUtil.getDeviceVersion(runtime)); sendSMS(phonenumber, DeviceInfoUtil.getDeviceVersion(runtime)); ICLogger.i("SMS " + sms + " reply " + DeviceInfoUtil.getShortDeviceInfo(runtime)); sendSMS(phonenumber, DeviceInfoUtil.getShortDeviceInfo(runtime)); - } else if (sms.startsWith("#status#")) { - String reply = "IMEI=" + runtime.IMEI() + "\nSW:" + DeviceInfoUtil.getVersionCode(mContext) + " " + DeviceInfoUtil.getSWVersionDisplayName(); + } else if (sms.startsWith(ENCRYPED_HEADER+"#status#")) { + String reply = "IMEI=" + runtime.IMEI() + "\nSW:" + DeviceInfoUtil.getVersionCode(mContext) + " " + DeviceInfoUtil.getSWVersionDisplayName()+"\nBattery:"+runtime.getBattery()+"%"; + ICLogger.i("SMS " + sms + " reply \n" + reply); sendSMS(phonenumber, reply); - } else if (sms.startsWith("#atcmd#=")) { + } else if (sms.startsWith(ENCRYPED_HEADER+"#atcmd#=")) { String cmd = sms.substring(8); ICLogger.i("atcmd " + cmd); if (cmd.length() >0 ) { @@ -188,7 +219,7 @@ public class ICSmsManager { } else { sendSMS(phonenumber, "At cmd empty error!"); } - }else if (sms.startsWith("#imei:")) { + }else if (sms.startsWith(ENCRYPED_HEADER+"#imei:")) { String imei = sms.substring(6); ICLogger.i("SMS " + sms + " imei=" + imei); if (imei.length() == 15) { @@ -209,7 +240,7 @@ public class ICSmsManager { } else { sendSMS(phonenumber, "set IMEI " + imei + " failed ! len!=15"); } - } else if ((sms.startsWith("#ip#=") || sms.startsWith("#host#=")) && sms.endsWith("#")) { + } else if ((sms.startsWith(ENCRYPED_HEADER+"#ip#=") || sms.startsWith(ENCRYPED_HEADER+"#host#=")) && sms.endsWith("#")) { String tmp[] = sms.split("="); String reply = ""; ICLogger.i(sms + " len " + tmp.length); @@ -256,7 +287,7 @@ public class ICSmsManager { reply = sms + " falied! "; } sendSMS(phonenumber, reply); - } else if (sms.startsWith("#setlocation#=") && sms.endsWith("#")) { + } else if (sms.startsWith(ENCRYPED_HEADER+"#setlocation#=") && sms.endsWith("#")) { String tmp[] = sms.split("="); if (tmp.length == 2) { if (tmp[1].equals("reset#")) { @@ -307,7 +338,7 @@ public class ICSmsManager { sendSMS(phonenumber, "setlocation format error!"); } - } else if (sms.startsWith("#skipmovecheck#=")) { + } else if (sms.startsWith(ENCRYPED_HEADER+"#skipmovecheck#=")) { String tmp[] = sms.split("="); if (tmp.length == 2) { if (tmp[1].equals("current")) { @@ -324,7 +355,7 @@ public class ICSmsManager { } else { sendSMS(phonenumber, "skipmovecheck format error!"); } - }else if(sms.startsWith("#wifictl#=")){ + }else if(sms.startsWith(ENCRYPED_HEADER+"#wifictl#=")){ String tmp[] = sms.split("="); if (tmp.length == 2) { if (tmp[1].equals("current")) { @@ -377,7 +408,7 @@ public class ICSmsManager { } else { sendSMS(phonenumber, "WiFi Control format error!"); } - }else if(sms.startsWith("#logctl#=")){ + }else if(sms.startsWith(ENCRYPED_HEADER+"#logctl#=")){ String tmp[] = sms.split("="); if (tmp.length == 2) { if (tmp[1].equals("current")) { @@ -560,7 +591,7 @@ public class ICSmsManager { sendSMS(phonenumber, "set LogFtp ctl format error! "+sms); } - }else if (sms.startsWith("#TP#=")) { + }else if (sms.startsWith(ENCRYPED_HEADER+"#TP#=")) { String tmp[] = sms.split("="); if (tmp.length == 2) { if (tmp[1].equals("getver")) { @@ -595,7 +626,7 @@ public class ICSmsManager { } else { sendSMS(phonenumber, "TP cmd format error!"); } - }else if (sms.startsWith("#USB#=")) { + }else if (sms.startsWith(ENCRYPED_HEADER+"#USB#=")) { String tmp[] = sms.split("="); if (tmp.length == 2) { if(tmp[1].equals("current")) @@ -613,23 +644,66 @@ public class ICSmsManager { } else { sendSMS(phonenumber, "USB cmd format error!"); } - }else if (sms.startsWith("#factoryreset#")) { - sendSMS(phonenumber, "do factoryreset!"); + }else if (sms.startsWith(ENCRYPED_HEADER+"#factoryreset#")|| sms.startsWith(ENCRYPED_HEADER+"#reset#")) { + sendSMS(phonenumber, "do factoryreset ok!"); CoreService.DevliverStringMessage("FactoryReset"); - }else if (sms.startsWith("#reboot#")) { - sendSMS(phonenumber, "do reboot!"); + }else if (sms.startsWith(ENCRYPED_HEADER+"#reboot#")) { + sendSMS(phonenumber, "do reboot ok!"); CoreService.DevliverStringMessage("Reboot"); - }else if (sms.startsWith("#poweroff#")) { - sendSMS(phonenumber, "do poweroff!"); + }else if (sms.startsWith(ENCRYPED_HEADER+"#poweroff#")) { + sendSMS(phonenumber, "do poweroff ok!"); CoreService.DevliverStringMessage("poweroff"); - }else if (sms.startsWith("#packagevers#")) { + }else if (sms.startsWith(ENCRYPED_HEADER+"#packagevers#")) { sendSMS(phonenumber, DeviceInfoUtil.getPackageVersions(mContext)); - } else if (sms.startsWith("#showui#")) { + } else if (sms.startsWith(ENCRYPED_HEADER+"#showui#")) { Intent intent=new Intent(); // intent.setClassName(MainActivity.class.getPackage().getName(),MainActivity.class.getName()); intent.setClass(mContext,MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.startActivity(intent); + } else if (sms.startsWith(ENCRYPED_HEADER+"#PW=")&& sms.endsWith("#")) { + String tmp[] = sms.split("="); + if (tmp.length == 2) { + if(tmp[1].equals(Config.DefaultSMSPassword+"#")) + { + Config.setSMSPwd(mContext,Config.DefaultSMSPassword); + sendSMS(phonenumber, "Cancel SMS PW ok!"); + }else{ + Config.setSMSPwd(mContext,tmp[1].replace("#","")); + sendSMS(phonenumber, "SET SMS PW ok "+Config.getSMSPwd(mContext)); + } + } else { + sendSMS(phonenumber, "set SMSCMD PWD format error!"); + } + } else if (sms.startsWith(ENCRYPED_HEADER+"#sos=")&& sms.endsWith("#")) { + String tmp[] = sms.split("="); + if (tmp.length == 2) { + String str_sosNums=tmp[1].replace("#",""); + String[] soslist=str_sosNums.split(";"); + if (soslist.length>=1 && soslist.length<=3 ) { + String phNum1 = soslist[0]; + String phNum2 =""; + String phNum3 = ""; + if (soslist.length>1) phNum2=soslist[1]; + if (soslist.length>2) phNum3=soslist[2]; + + ArrayList contactArray=new ArrayList(); + if (!phNum1.isEmpty()) contactArray.add(new Contact(Contact.CATEGORY_SOS,"sos1",phNum1)); + if (!phNum2.isEmpty()) contactArray.add(new Contact(Contact.CATEGORY_SOS,"sos2",phNum2)); + if (!phNum3.isEmpty()) contactArray.add(new Contact(Contact.CATEGORY_SOS,"sos3",phNum3)); + + runtime.getDbHelper().saveContacts(contactArray,false,false,false,false,false,true); + + sendSMS(phonenumber, "set SOS number ok!"); + + }else{ + sendSMS(phonenumber, "set SOS number format Error!"); + } + + } else { + sendSMS(phonenumber, "set SMSCMD PWD format error!"); + } + }else { return false; } diff --git a/app/src/main/java/com/enqualcomm/support/utils/APNUtil.java b/app/src/main/java/com/enqualcomm/support/utils/APNUtil.java index 52d61f2e..bbca3a6d 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/APNUtil.java +++ b/app/src/main/java/com/enqualcomm/support/utils/APNUtil.java @@ -17,14 +17,23 @@ public class APNUtil { /** * 所有APN * */ - private static Uri APN_URI = Uri.parse("content://telephony/carriers"); + private static Uri APN_URI = Uri.parse("content://telephony/carriers"); //apn列表uri - private static Uri CURRENT_APN_URI = Uri.parse("content://telephony/carriers/preferapn"); + private static Uri CURRENT_APN_URI = Uri.parse("content://telephony/carriers/preferapn"); //主apn的uri + + final String MY_APN = "my apn"; public static String getCurrentAPN(Context context){ ContentResolver resolver = context.getContentResolver(); Cursor c = resolver.query(APN_URI_NOW, null, null, null, null); //从apn列表中查找apn名称为myapn的apn信息 String APNSTR=""; + String Columns=""; + for (String column :c.getColumnNames()) + { + Columns+=column+","; + } + +// APN不存在 columns=_id,name,numeric,mcc,mnc,apn,user,server,password,proxy,port,mmsproxy,mmsport,mmsc,authtype,type,current,protocol,preload,roaming_protocol,editable,traffic_class,carrier_enabled,bearer,mvno_type,mvno_match_data, if (c != null && c.moveToNext()) { int id = c.getShort(c.getColumnIndex("_id")); //获取该apn的id信息 String mcc=c.getString(c.getColumnIndex("mcc")); @@ -33,7 +42,16 @@ public class APNUtil { String apnname=c.getString(c.getColumnIndex("apn")); String user=c.getString(c.getColumnIndex("user")); String pwd=c.getString(c.getColumnIndex("password")); - APNSTR="Current APN "+id+","+mcc+","+mnc+","+name+","+apnname+","+user+","+pwd; + String _type=c.getString(c.getColumnIndex("type")); + APNSTR="[Current APN name = "+apnname+ + ",_id="+id+ + ",mcc="+mcc+ + ",mnc="+mnc+ + ",name="+name+ + ",user="+user+ + ",password="+pwd+ + ",type="+_type+ + "]"; ICLogger.i(APNSTR); } else { ICLogger.i("APN不存在"); @@ -85,6 +103,52 @@ public class APNUtil { return false; } + public static String checkAPN(String mcc,String mnc,Context context) { + // 检查系统已经写入的APN + Cursor cr = context.getContentResolver().query(APN_URI, null, null, null, null); + +// String Columns=""; +// for (String column :cr.getColumnNames()) +// { +// Columns+=column+","; +// } + +// APN name = mms,mcc=655,mnc=07,column names :_id,name,numeric,mcc,mnc,apn,user,server,password,proxy,port,mmsproxy,mmsport,mmsc,authtype,type,current,protocol,preload,roaming_protocol,editable,traffic_class,carrier_enabled,bearer,mvno_type,mvno_match_data, + + String found=""; + + while (cr != null && cr.moveToNext()) { + +// ",column names :"+Columns); + if(cr.getString(cr.getColumnIndex("mcc")).equals(mcc) + && cr.getString(cr.getColumnIndex("mnc")).equals(mnc)){ + + int id = cr.getShort(cr.getColumnIndex("_id")); //获取该apn的id信息 + String name=cr.getString(cr.getColumnIndex("name")); + String apnname=cr.getString(cr.getColumnIndex("apn")); + String user=cr.getString(cr.getColumnIndex("user")); + String pwd=cr.getString(cr.getColumnIndex("password")); + String _type=cr.getString(cr.getColumnIndex("type")); + String msg="[APN name = "+apnname+ + ",_id="+id+ + ",mcc="+mcc+ + ",mnc="+mnc+ + ",name="+name+ + ",user="+user+ + ",password="+pwd+ + ",type="+_type+ + "],"; + found +=msg; + } + } + found+=getCurrentAPN(context); + ICLogger.i(found); + + return found; + } + + + public static int AddNewApn(String apnName,String apn, String mcc,String mnc , String user,String passwd, Context context) { ICLogger.i("添加一个新的apn ==> "+apnName+", mcc="+mcc+", mnc="+mnc+", user="+user+", password="+passwd); @@ -123,5 +187,20 @@ public class APNUtil { return apnId; } + private boolean hasMyApn(Context context) { + ContentResolver resolver = context.getContentResolver(); + Cursor cursor = resolver.query(APN_URI, new String[]{"_id", "name"}, null, null, null); + for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()){ + int nameIndex = cursor.getColumnIndex("name"); + int idIndex = cursor.getColumnIndex("_id"); + String name = cursor.getString(nameIndex); + ICLogger.i( name); + if (MY_APN.equals(name)) { + //myId = cursor.getShort(idIndex); + return true; + } + } + return false; + } }