import android.telephony.SmsMessage;\r
import android.widget.Toast;\r
\r
+import com.enqualcomm.support.bean.Contact;\r
import com.enqualcomm.support.bean.ICLocation;\r
import com.enqualcomm.support.bean.Runtime;\r
import com.enqualcomm.support.service.Deliver;\r
//回复\r
//IMEI: 353503535035350\r
//SW: L02_20200208_V1\r
+\r
+\r
+ public String RemoveEncrypedHeader(String sms){\r
+ String smsPWD=Config.getSMSPwd(mContext);\r
+ if(!smsPWD.equals("none")){\r
+ if (!sms.startsWith(smsPWD)){\r
+ ICLogger.i("开头不是密码!");\r
+ }else{\r
+ //ICLogger.i("开头不是密码!");\r
+ return sms;\r
+ }\r
+ }else{\r
+ return sms;\r
+ }\r
+ return sms;\r
+ }\r
public boolean handleSMS_CMD(String phonenumber, String sms){\r
if (isAdminNumber(phonenumber)) {\r
\r
+ String ENCRYPED_HEADER = Config.getSMSPwd(mContext);\r
+ if (ENCRYPED_HEADER.equals(Config.DefaultSMSPassword)) {\r
+ ENCRYPED_HEADER = "";\r
+ }\r
+\r
+ if (sms.equals(ENCRYPED_HEADER + "#logctl#=upload,all")){\r
+ sms=ENCRYPED_HEADER+"#logctl#=upload,SDLog:Android/ic";\r
+ }\r
if (sms == null || sms.isEmpty()) return false;\r
- if (sms.startsWith("#apn#=") && sms.endsWith("#")) {\r
+ if (sms.startsWith(ENCRYPED_HEADER+"#apn#=") && sms.endsWith("#")) {\r
String[] tmp = sms.split("#");\r
if (tmp.length == 3) {\r
String[] apnvalues = tmp[2].replace("=", "").split(",");\r
\r
String apnstr = APNUtil.getCurrentAPN(mContext);\r
sendSMS(phonenumber, apnstr);\r
+ }else if (apnvalues[0].equals("check")) {\r
+ String mcc=runtime.getLocationInstance().getMCC();\r
+ String mnc=runtime.getLocationInstance().getMNC();\r
+ String apnstr = APNUtil.checkAPN(mcc,mnc,mContext);\r
+ sendSMS(phonenumber, apnstr);\r
} else {\r
sendSMS(phonenumber, "apn cmd format error!");\r
}\r
sendSMS(phonenumber, "apn cmd format error!");\r
\r
}\r
- } else if (sms.startsWith("#deviceinfo#")) {\r
+ } else if (sms.startsWith(ENCRYPED_HEADER+"#deviceinfo#")) {\r
ICLogger.i("SMS " + sms + " reply " + DeviceInfoUtil.getDeviceVersion(runtime));\r
sendSMS(phonenumber, DeviceInfoUtil.getDeviceVersion(runtime));\r
ICLogger.i("SMS " + sms + " reply " + DeviceInfoUtil.getShortDeviceInfo(runtime));\r
sendSMS(phonenumber, DeviceInfoUtil.getShortDeviceInfo(runtime));\r
- } else if (sms.startsWith("#status#")) {\r
- String reply = "IMEI=" + runtime.IMEI() + "\nSW:" + DeviceInfoUtil.getVersionCode(mContext) + " " + DeviceInfoUtil.getSWVersionDisplayName();\r
+ } else if (sms.startsWith(ENCRYPED_HEADER+"#status#")) {\r
+ String reply = "IMEI=" + runtime.IMEI() + "\nSW:" + DeviceInfoUtil.getVersionCode(mContext) + " " + DeviceInfoUtil.getSWVersionDisplayName()+"\nBattery:"+runtime.getBattery()+"%";\r
+\r
ICLogger.i("SMS " + sms + " reply \n" + reply);\r
sendSMS(phonenumber, reply);\r
- } else if (sms.startsWith("#atcmd#=")) {\r
+ } else if (sms.startsWith(ENCRYPED_HEADER+"#atcmd#=")) {\r
String cmd = sms.substring(8);\r
ICLogger.i("atcmd " + cmd);\r
if (cmd.length() >0 ) {\r
} else {\r
sendSMS(phonenumber, "At cmd empty error!");\r
}\r
- }else if (sms.startsWith("#imei:")) {\r
+ }else if (sms.startsWith(ENCRYPED_HEADER+"#imei:")) {\r
String imei = sms.substring(6);\r
ICLogger.i("SMS " + sms + " imei=" + imei);\r
if (imei.length() == 15) {\r
} else {\r
sendSMS(phonenumber, "set IMEI " + imei + " failed ! len!=15");\r
}\r
- } else if ((sms.startsWith("#ip#=") || sms.startsWith("#host#=")) && sms.endsWith("#")) {\r
+ } else if ((sms.startsWith(ENCRYPED_HEADER+"#ip#=") || sms.startsWith(ENCRYPED_HEADER+"#host#=")) && sms.endsWith("#")) {\r
String tmp[] = sms.split("=");\r
String reply = "";\r
ICLogger.i(sms + " len " + tmp.length);\r
reply = sms + " falied! ";\r
}\r
sendSMS(phonenumber, reply);\r
- } else if (sms.startsWith("#setlocation#=") && sms.endsWith("#")) {\r
+ } else if (sms.startsWith(ENCRYPED_HEADER+"#setlocation#=") && sms.endsWith("#")) {\r
String tmp[] = sms.split("=");\r
if (tmp.length == 2) {\r
if (tmp[1].equals("reset#")) {\r
sendSMS(phonenumber, "setlocation format error!");\r
}\r
\r
- } else if (sms.startsWith("#skipmovecheck#=")) {\r
+ } else if (sms.startsWith(ENCRYPED_HEADER+"#skipmovecheck#=")) {\r
String tmp[] = sms.split("=");\r
if (tmp.length == 2) {\r
if (tmp[1].equals("current")) {\r
} else {\r
sendSMS(phonenumber, "skipmovecheck format error!");\r
}\r
- }else if(sms.startsWith("#wifictl#=")){\r
+ }else if(sms.startsWith(ENCRYPED_HEADER+"#wifictl#=")){\r
String tmp[] = sms.split("=");\r
if (tmp.length == 2) {\r
if (tmp[1].equals("current")) {\r
} else {\r
sendSMS(phonenumber, "WiFi Control format error!");\r
}\r
- }else if(sms.startsWith("#logctl#=")){\r
+ }else if(sms.startsWith(ENCRYPED_HEADER+"#logctl#=")){\r
String tmp[] = sms.split("=");\r
if (tmp.length == 2) {\r
if (tmp[1].equals("current")) {\r
sendSMS(phonenumber, "set LogFtp ctl format error! "+sms);\r
}\r
\r
- }else if (sms.startsWith("#TP#=")) {\r
+ }else if (sms.startsWith(ENCRYPED_HEADER+"#TP#=")) {\r
String tmp[] = sms.split("=");\r
if (tmp.length == 2) {\r
if (tmp[1].equals("getver")) {\r
} else {\r
sendSMS(phonenumber, "TP cmd format error!");\r
}\r
- }else if (sms.startsWith("#USB#=")) {\r
+ }else if (sms.startsWith(ENCRYPED_HEADER+"#USB#=")) {\r
String tmp[] = sms.split("=");\r
if (tmp.length == 2) {\r
if(tmp[1].equals("current"))\r
} else {\r
sendSMS(phonenumber, "USB cmd format error!");\r
}\r
- }else if (sms.startsWith("#factoryreset#")) {\r
- sendSMS(phonenumber, "do factoryreset!");\r
+ }else if (sms.startsWith(ENCRYPED_HEADER+"#factoryreset#")|| sms.startsWith(ENCRYPED_HEADER+"#reset#")) {\r
+ sendSMS(phonenumber, "do factoryreset ok!");\r
CoreService.DevliverStringMessage("FactoryReset");\r
- }else if (sms.startsWith("#reboot#")) {\r
- sendSMS(phonenumber, "do reboot!");\r
+ }else if (sms.startsWith(ENCRYPED_HEADER+"#reboot#")) {\r
+ sendSMS(phonenumber, "do reboot ok!");\r
CoreService.DevliverStringMessage("Reboot");\r
- }else if (sms.startsWith("#poweroff#")) {\r
- sendSMS(phonenumber, "do poweroff!");\r
+ }else if (sms.startsWith(ENCRYPED_HEADER+"#poweroff#")) {\r
+ sendSMS(phonenumber, "do poweroff ok!");\r
CoreService.DevliverStringMessage("poweroff");\r
- }else if (sms.startsWith("#packagevers#")) {\r
+ }else if (sms.startsWith(ENCRYPED_HEADER+"#packagevers#")) {\r
sendSMS(phonenumber, DeviceInfoUtil.getPackageVersions(mContext));\r
- } else if (sms.startsWith("#showui#")) {\r
+ } else if (sms.startsWith(ENCRYPED_HEADER+"#showui#")) {\r
Intent intent=new Intent();\r
// intent.setClassName(MainActivity.class.getPackage().getName(),MainActivity.class.getName());\r
intent.setClass(mContext,MainActivity.class);\r
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);\r
mContext.startActivity(intent);\r
+ } else if (sms.startsWith(ENCRYPED_HEADER+"#PW=")&& sms.endsWith("#")) {\r
+ String tmp[] = sms.split("=");\r
+ if (tmp.length == 2) {\r
+ if(tmp[1].equals(Config.DefaultSMSPassword+"#"))\r
+ {\r
+ Config.setSMSPwd(mContext,Config.DefaultSMSPassword);\r
+ sendSMS(phonenumber, "Cancel SMS PW ok!");\r
+ }else{\r
+ Config.setSMSPwd(mContext,tmp[1].replace("#",""));\r
+ sendSMS(phonenumber, "SET SMS PW ok "+Config.getSMSPwd(mContext));\r
+ }\r
+ } else {\r
+ sendSMS(phonenumber, "set SMSCMD PWD format error!");\r
+ }\r
+ } else if (sms.startsWith(ENCRYPED_HEADER+"#sos=")&& sms.endsWith("#")) {\r
+ String tmp[] = sms.split("=");\r
+ if (tmp.length == 2) {\r
+ String str_sosNums=tmp[1].replace("#","");\r
+ String[] soslist=str_sosNums.split(";");\r
+ if (soslist.length>=1 && soslist.length<=3 ) {\r
+ String phNum1 = soslist[0];\r
+ String phNum2 ="";\r
+ String phNum3 = "";\r
+ if (soslist.length>1) phNum2=soslist[1];\r
+ if (soslist.length>2) phNum3=soslist[2];\r
+\r
+ ArrayList<Contact> contactArray=new ArrayList<Contact>();\r
+ if (!phNum1.isEmpty()) contactArray.add(new Contact(Contact.CATEGORY_SOS,"sos1",phNum1));\r
+ if (!phNum2.isEmpty()) contactArray.add(new Contact(Contact.CATEGORY_SOS,"sos2",phNum2));\r
+ if (!phNum3.isEmpty()) contactArray.add(new Contact(Contact.CATEGORY_SOS,"sos3",phNum3));\r
+\r
+ runtime.getDbHelper().saveContacts(contactArray,false,false,false,false,false,true);\r
+\r
+ sendSMS(phonenumber, "set SOS number ok!");\r
+\r
+ }else{\r
+ sendSMS(phonenumber, "set SOS number format Error!");\r
+ }\r
+\r
+ } else {\r
+ sendSMS(phonenumber, "set SMSCMD PWD format error!");\r
+ }\r
+\r
}else {\r
return false;\r
}\r
/**\r
* 所有APN\r
* */\r
- private static Uri APN_URI = Uri.parse("content://telephony/carriers");\r
+ private static Uri APN_URI = Uri.parse("content://telephony/carriers"); //apn列表uri\r
\r
- private static Uri CURRENT_APN_URI = Uri.parse("content://telephony/carriers/preferapn");\r
+ private static Uri CURRENT_APN_URI = Uri.parse("content://telephony/carriers/preferapn"); //主apn的uri\r
+\r
+ final String MY_APN = "my apn";\r
\r
public static String getCurrentAPN(Context context){\r
ContentResolver resolver = context.getContentResolver();\r
Cursor c = resolver.query(APN_URI_NOW, null, null, null, null); //从apn列表中查找apn名称为myapn的apn信息\r
String APNSTR="";\r
+ String Columns="";\r
+ for (String column :c.getColumnNames())\r
+ {\r
+ Columns+=column+",";\r
+ }\r
+\r
+// 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,\r
if (c != null && c.moveToNext()) {\r
int id = c.getShort(c.getColumnIndex("_id")); //获取该apn的id信息\r
String mcc=c.getString(c.getColumnIndex("mcc"));\r
String apnname=c.getString(c.getColumnIndex("apn"));\r
String user=c.getString(c.getColumnIndex("user"));\r
String pwd=c.getString(c.getColumnIndex("password"));\r
- APNSTR="Current APN "+id+","+mcc+","+mnc+","+name+","+apnname+","+user+","+pwd;\r
+ String _type=c.getString(c.getColumnIndex("type"));\r
+ APNSTR="[Current APN name = "+apnname+\r
+ ",_id="+id+\r
+ ",mcc="+mcc+\r
+ ",mnc="+mnc+\r
+ ",name="+name+\r
+ ",user="+user+\r
+ ",password="+pwd+\r
+ ",type="+_type+\r
+ "]";\r
ICLogger.i(APNSTR);\r
} else {\r
ICLogger.i("APN不存在");\r
return false;\r
}\r
\r
+ public static String checkAPN(String mcc,String mnc,Context context) {\r
+ // 检查系统已经写入的APN\r
+ Cursor cr = context.getContentResolver().query(APN_URI, null, null, null, null);\r
+\r
+// String Columns="";\r
+// for (String column :cr.getColumnNames())\r
+// {\r
+// Columns+=column+",";\r
+// }\r
+\r
+// 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,\r
+\r
+ String found="";\r
+\r
+ while (cr != null && cr.moveToNext()) {\r
+\r
+// ",column names :"+Columns);\r
+ if(cr.getString(cr.getColumnIndex("mcc")).equals(mcc)\r
+ && cr.getString(cr.getColumnIndex("mnc")).equals(mnc)){\r
+\r
+ int id = cr.getShort(cr.getColumnIndex("_id")); //获取该apn的id信息\r
+ String name=cr.getString(cr.getColumnIndex("name"));\r
+ String apnname=cr.getString(cr.getColumnIndex("apn"));\r
+ String user=cr.getString(cr.getColumnIndex("user"));\r
+ String pwd=cr.getString(cr.getColumnIndex("password"));\r
+ String _type=cr.getString(cr.getColumnIndex("type"));\r
+ String msg="[APN name = "+apnname+\r
+ ",_id="+id+\r
+ ",mcc="+mcc+\r
+ ",mnc="+mnc+\r
+ ",name="+name+\r
+ ",user="+user+\r
+ ",password="+pwd+\r
+ ",type="+_type+\r
+ "],";\r
+ found +=msg;\r
+ }\r
+ }\r
+ found+=getCurrentAPN(context);\r
+ ICLogger.i(found);\r
+\r
+ return found;\r
+ }\r
+\r
+\r
+\r
\r
public static int AddNewApn(String apnName,String apn, String mcc,String mnc , String user,String passwd, Context context) {\r
ICLogger.i("添加一个新的apn ==> "+apnName+", mcc="+mcc+", mnc="+mnc+", user="+user+", password="+passwd);\r
return apnId;\r
}\r
\r
+ private boolean hasMyApn(Context context) {\r
+ ContentResolver resolver = context.getContentResolver();\r
+ Cursor cursor = resolver.query(APN_URI, new String[]{"_id", "name"}, null, null, null);\r
+ for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()){\r
+ int nameIndex = cursor.getColumnIndex("name");\r
+ int idIndex = cursor.getColumnIndex("_id");\r
+ String name = cursor.getString(nameIndex);\r
+ ICLogger.i( name);\r
+ if (MY_APN.equals(name)) {\r
+ //myId = cursor.getShort(idIndex);\r
+ return true;\r
+ }\r
+ }\r
+ return false;\r
+ }\r
\r
}\r