From: snickersun Date: Tue, 28 Jan 2020 21:38:15 +0000 (+0800) Subject: 通讯录同步,已经可以用EqcIMessage做通讯录,但是安卓通讯录还没有清空,会重复添加。 X-Git-Url: http://git.snicker.com.cn/sitemap.xml?a=commitdiff_plain;h=b1db4a27f7f11955dad45244c315b4e642916ef7;p=icsupport.git 通讯录同步,已经可以用EqcIMessage做通讯录,但是安卓通讯录还没有清空,会重复添加。 --- diff --git a/app/src/main/java/com/ic/protocol/adapter/protocolAPIHelper.java b/app/src/main/java/com/ic/protocol/adapter/protocolAPIHelper.java index dd7d0042..a289a175 100644 --- a/app/src/main/java/com/ic/protocol/adapter/protocolAPIHelper.java +++ b/app/src/main/java/com/ic/protocol/adapter/protocolAPIHelper.java @@ -4,12 +4,14 @@ import android.content.Intent; import android.util.Log; import com.ic.protocol.Config; +import com.ic.protocol.bean.Contact; import com.ic.protocol.bean.ICLocation; import com.ic.protocol.bean.Runtime; import com.ic.protocol.bean.StringMessage; import com.ic.protocol.bean.voicePacket; import com.ic.protocol.service.protocolMainServer; import com.ic.protocol.utils.Connection; +import com.ic.protocol.utils.DBHelper; import com.ic.protocol.utils.Logger; import com.ic.protocol.utils.SharPreferenceUtil; import com.ic.protocol.utils.Util; @@ -327,7 +329,11 @@ public class protocolAPIHelper { .append(ds.getGPSData()).append(ds.getShortTime()).append(ds.getGPSHeading()).append(String.format("%03d",abs(ds.getSignalStrength()))) .append(ds.getGPSLocationStarNums()).append(ds.getBattery()).append("0") .append(ds.getProtection()).append(ds.getWorkMode()).append(CMDSPLIT) - .append(ds.getLBSData()).append(CMDSPLIT).append(ds.getWifiInfo()).append(CMDEND).toString(); + .append(ds.getLBSData()).append(CMDSPLIT) + .append(ds.getAlarmType()).append(CMDSPLIT) + .append(ds.getLanguage()).append(CMDSPLIT) + .append(0).append(CMDSPLIT) //不回复地址 + .append(ds.getWifiInfo()).append(CMDEND).toString(); } @@ -573,7 +579,7 @@ public class protocolAPIHelper { .append(CMDEND).toString(); } //设置通讯录,白名单(10个) - public void handleBP14(Connection connection,String cmd){ + public void handleBP14(Connection connection,String cmd , Runtime runtime){ // IWBP14,867155030001063,357444,9b44529b|13554820016,,,,,,,,, /** * IWBP14,353456789012345,080835, @@ -629,6 +635,20 @@ public class protocolAPIHelper { String index=cmdlist[2]; Logger.i(sb.toString()); connection.send(genStringMessage("AP14",AP14(index,phnums))); + ArrayList contactArray=new ArrayList(); + for (int i=0; i< phnums.length;i++){ + String[] tmp= phnums[i].split("\\|"); + if (tmp.length==2){ + String name=Util.decodeUnicode2Utf8(tmp[0]); + String phonem=tmp[1]; + Logger.i("phnums["+i+"]="+phnums[i]+",split = "+tmp.length+" , name="+name+",-"+phonem); + contactArray.add(new Contact(Contact.CATEGORY_CALL,name,phonem)); + }else{ + Logger.i("phnums["+i+"]="+phnums[i]+",split = "+tmp.length); + + } + } + runtime.getDbHelper().saveContacts(contactArray,false,false,true,false,false); }else{ Logger.i(" BP14 format error!"); diff --git a/app/src/main/java/com/ic/protocol/bean/Contact.java b/app/src/main/java/com/ic/protocol/bean/Contact.java index e4808a42..1decbbf8 100644 --- a/app/src/main/java/com/ic/protocol/bean/Contact.java +++ b/app/src/main/java/com/ic/protocol/bean/Contact.java @@ -39,26 +39,47 @@ public class Contact implements Parcelable { public String name; public String number; - - public Contact(int paramInt, String paramString1, String paramString2) { - this.category = paramInt; - this.name = paramString1; - this.number = paramString2; + + /** + * Contact + * @param _category + * @param _name + * @param _number + */ + public Contact(int _category, String _name, String _number) { + this.category = _category; + this.name = _name; + this.number = _number; } - - public Contact(int paramInt, String paramString1, String paramString2, String paramString3) { - this.category = paramInt; - this.name = paramString1; - this.number = paramString2; - this.extra = paramString3; + + /** + * Contact + * @param _category + * @param _name + * @param _number + * @param _extra + */ + public Contact(int _category, String _name, String _number, String _extra) { + this.category = _category; + this.name = _name; + this.number = _number; + this.extra = _extra; } - - public Contact(int paramInt, String paramString1, String paramString2, String paramString3, String paramString4) { - this.category = paramInt; - this.name = paramString1; - this.number = paramString2; - this.icon_index = paramString3; - this.extra = paramString4; + + /** + * Contact + * @param _category + * @param _name + * @param _number + * @param _icon_index + * @param _extra + */ + public Contact(int _category, String _name, String _number, String _icon_index, String _extra) { + this.category = _category; + this.name = _name; + this.number = _number; + this.icon_index = _icon_index; + this.extra = _extra; } protected Contact(Parcel paramParcel) { diff --git a/app/src/main/java/com/ic/protocol/bean/Runtime.java b/app/src/main/java/com/ic/protocol/bean/Runtime.java index 8617a009..f3a9f4dc 100644 --- a/app/src/main/java/com/ic/protocol/bean/Runtime.java +++ b/app/src/main/java/com/ic/protocol/bean/Runtime.java @@ -93,6 +93,33 @@ public class Runtime { private String mccAndMnc; + private String language="zh-cn"; + public String getLanguage(){ + return language; + } + public void setLanguage(String _language){ + language=_language; + } + + private String alarmType="00"; + public String getAlarmType(){ + return alarmType; + } + +// 00为无任何报警(01:SOS,02:低电,03:脱落报警,04:佩戴提醒,05/06:跌倒报警)) + public void setAlarmType(boolean fall,boolean lowbattery,boolean sos,boolean antioff){ +// if ( !fall && !lowbattery && !sos && antioff) + alarmType= "00"; + if (sos){ + alarmType= "01"; + }else if(lowbattery){ + alarmType= "02"; + }else if(antioff){ + alarmType= "03"; + }else if(fall){ + alarmType= "05"; + } + } public String preCdmaInfo; diff --git a/app/src/main/java/com/ic/protocol/service/KeepAlive.java b/app/src/main/java/com/ic/protocol/service/KeepAlive.java index c8cc9794..ac6c2fa7 100644 --- a/app/src/main/java/com/ic/protocol/service/KeepAlive.java +++ b/app/src/main/java/com/ic/protocol/service/KeepAlive.java @@ -19,9 +19,14 @@ import com.ic.protocol.utils.NettyConnection; import com.ic.protocol.utils.NetworkObservable; import com.ic.protocol.utils.ServiceUtil; import com.ic.protocol.bean.Runtime; + +import java.util.concurrent.TimeUnit; + +import rx.Observable; import rx.Subscription; import rx.functions.Action1; +import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import static com.eiot.watch_lib.LauncherCtrl.STATUS_BAR_STATE_SERVER_CONNECTED_OFF; import static com.eiot.watch_lib.LauncherCtrl.STATUS_BAR_STATE_SERVER_CONNECTED_ON; @@ -191,13 +196,34 @@ public class KeepAlive extends AbstractConnectionService { this.idleTimeMillis = SystemClock.elapsedRealtime(); Logger.i(TAG+paramStringMessage.cmd()); if ("heart".equals(paramStringMessage.cmd()) || "FactoryReset".equals(paramStringMessage.cmd()) || "poweroff".equals(paramStringMessage.cmd()) || "Reboot".equals(paramStringMessage.cmd())) { - if ("poweroff".equals(paramStringMessage.cmd())) - paramRuntime.getContextProxy().shutdown(); - if ("FactoryReset".equals(paramStringMessage.cmd())) - paramRuntime.getContextProxy().doMasterClear(); - if ("Reboot".equals(paramStringMessage.cmd())) - paramRuntime.getContextProxy().reboot(); + if ("poweroff".equals(paramStringMessage.cmd())) { + + + paramRuntime.setShutdown(true); + Observable.timer(60000L, TimeUnit.MILLISECONDS).subscribe(new Action1() { + public void call(Long param1Long) { + paramRuntime.getContextProxy().shutdown(); + } + }); + + } + if ("FactoryReset".equals(paramStringMessage.cmd())) { + Observable.timer(5000L, TimeUnit.MILLISECONDS).subscribe(new Action1() { + public void call(Long param1Long) { + paramRuntime.getContextProxy().doMasterClear(); + } + }); + + } + if ("Reboot".equals(paramStringMessage.cmd())) { + + Observable.timer(5000L, TimeUnit.MILLISECONDS).subscribe(new Action1() { + public void call(Long param1Long) { + paramRuntime.getContextProxy().reboot(); + } + }); + } if ("heart".equals(paramStringMessage.cmd())) AlarmWakeUp.isNeedWakeUpAlarm(paramRuntime); return true; @@ -217,7 +243,7 @@ public class KeepAlive extends AbstractConnectionService { public void onReceive(Context param1Context, Intent param1Intent) { boolean bool = param1Intent.getBooleanExtra("reboot", false); if (KeepAlive.this.mRuntime.getBatteryLow() && !KeepAlive.this.mRuntime.getBatterychanging() && !bool && !KeepAlive.this.mRuntime.isShutdown()){ -// KeepAlive.this.connection.send(new StringMessage(protocolAPIHelper.AP00(KeepAlive.this.mRuntime))); + KeepAlive.this.connection.send(protocolAPIHelper.genStringMessage("AP10",protocolAPIHelper.AP10(KeepAlive.this.mRuntime))); } } diff --git a/app/src/main/java/com/ic/protocol/utils/DBHelper.java b/app/src/main/java/com/ic/protocol/utils/DBHelper.java index 1b04c55c..aaee9cfa 100644 --- a/app/src/main/java/com/ic/protocol/utils/DBHelper.java +++ b/app/src/main/java/com/ic/protocol/utils/DBHelper.java @@ -11,6 +11,8 @@ import android.content.ContentProviderOperation.Builder; import android.database.Cursor; import android.net.Uri; import android.os.SystemClock; +import android.provider.BaseColumns; +import android.provider.ContactsContract; import android.provider.ContactsContract.Data; import android.provider.ContactsContract.RawContacts; import android.text.TextUtils; @@ -34,6 +36,12 @@ import java.util.concurrent.TimeUnit; import rx.Observable; import rx.functions.Action1; +import static com.ic.protocol.bean.Contact.CATEGORY_ADMIN; +import static com.ic.protocol.bean.Contact.CATEGORY_CALL; +import static com.ic.protocol.bean.Contact.CATEGORY_CARE; +import static com.ic.protocol.bean.Contact.CATEGORY_PARTNER; +import static com.ic.protocol.bean.Contact.CATEGORY_VIDEO; + public class DBHelper { private static long lastUpdateTime; private Context context; @@ -44,95 +52,44 @@ public class DBHelper { this.context = var2; } - private void addAllContact(ArrayList var1, ContentResolver var2) { - Iterator var7 = var1.iterator(); - - while(var7.hasNext()) { - Contact var5 = (Contact)var7.next(); - ContentValues var6 = new ContentValues(); - long var3 = ContentUris.parseId(var2.insert(RawContacts.CONTENT_URI, var6)); - var6.clear(); - var6.put("raw_contact_id", var3); - var6.put("mimetype", "vnd.android.cursor.item/name"); - var6.put("data2", var5.name); - var2.insert(Data.CONTENT_URI, var6); - var6.clear(); - var6.put("raw_contact_id", var3); - var6.put("mimetype", "vnd.android.cursor.item/phone_v2"); - var6.put("data1", var5.number); - var6.put("data2", 2); - var2.insert(Data.CONTENT_URI, var6); - var6.clear(); - } - - } - - private void deleteAllContact(ArrayList var1, String var2, ContentResolver var3) { - StringBuilder var6 = new StringBuilder(); - var6.append("where="); - var6.append(var2); - Logger.i(var6.toString()); - Cursor var7 = var3.query(ICContentProvider.CONTACT_URI, (String[])null, var2, (String[])null, "CATEGORY ASC"); - ArrayList var12 = new ArrayList(); - if (var7 != null) { - while(true) { - if (!var7.moveToNext()) { - StringBuilder var8 = new StringBuilder(); - var8.append("newList="); - var8.append(var12.toString()); - Logger.i(var8.toString()); - var7.close(); - break; - } + private void addAllContact(ArrayList contactArray, ContentResolver resolver) { + Iterator contactIT = contactArray.iterator(); - var12.add(new Contact(var7.getInt(1), var7.getString(2), var7.getString(3), var7.getString(4), var7.getString(5))); - } - } + while(contactIT.hasNext()) { + Contact contact = (Contact)contactIT.next(); + ContentValues contentvalues = new ContentValues(); + long raw_contactID = ContentUris.parseId(resolver.insert(RawContacts.CONTENT_URI, contentvalues)); - for(int var4 = 0; var4 < var1.size(); ++var4) { - String var14 = ((Contact)var1.get(var4)).number; + contentvalues.clear(); + contentvalues.put("raw_contact_id", raw_contactID); + contentvalues.put("mimetype", "vnd.android.cursor.item/name"); + contentvalues.put("data2", contact.name); + resolver.insert(Data.CONTENT_URI, contentvalues); + contentvalues.clear(); - for(int var5 = 0; var5 < var12.size(); ++var5) { - if (!var14.equals(((Contact)var12.get(var5)).number) && !var14.equals(((Contact)var12.get(var5)).extra)) { - if (!TextUtils.isEmpty(((Contact)var12.get(var5)).icon_index)) { - File var17 = new File(((Contact)var12.get(var5)).icon_index); - if (var17.exists()) { - var17.delete(); - } - } - } else { - String var16 = ((Contact)var12.get(var5)).icon_index; - if (!TextUtils.isEmpty(var16) && var16.length() > 10 && var16.contains("/")) { - ((Contact)var1.get(var4)).icon_index = ((Contact)var12.get(var5)).icon_index; - } - } - } + contentvalues.put("raw_contact_id", raw_contactID); + contentvalues.put("mimetype", "vnd.android.cursor.item/phone_v2"); + contentvalues.put("data1", contact.number); + contentvalues.put("data2", 2); + resolver.insert(Data.CONTENT_URI, contentvalues); + contentvalues.clear(); } - Iterator var11 = var12.iterator(); - - while(var11.hasNext()) { - String var13 = this.getContactId(var3, ((Contact)var11.next()).number); - ArrayList var15 = new ArrayList(); - Builder var18 = ContentProviderOperation.newDelete(RawContacts.CONTENT_URI); - StringBuilder var9 = new StringBuilder(); - var9.append("contact_id="); - var9.append(var13); - var15.add(var18.withSelection(var9.toString(), (String[])null).build()); - var18 = ContentProviderOperation.newDelete(Data.CONTENT_URI); - var9 = new StringBuilder(); - var9.append("contact_id="); - var9.append(var13); - var15.add(var18.withSelection(var9.toString(), (String[])null).build()); - - try { - var3.applyBatch("com.android.contacts", var15); - } catch (Exception var10) { - Logger.i(var10.getMessage()); - } - } + } - var3.delete(ICContentProvider.CONTACT_URI, var2, (String[])null); + private void deleteAllContact(ArrayList contactArraylist, String where, ContentResolver resolver) { + StringBuilder sb = new StringBuilder(); + sb.append("where="); + sb.append(where); + Logger.i(sb.toString()); + Cursor cursor = resolver.query(ICContentProvider.CONTACT_URI, (String[])null, where, (String[])null, "CATEGORY ASC"); + + Iterator contactIT = contactArraylist.iterator(); + + while(contactIT.hasNext()) { + this.DeleteContactId(resolver, ((Contact)contactIT.next()).name); + } + resolver.delete(ICContentProvider.CONTACT_URI, where, (String[])null); } private Uri insertDownLoadInfo(String var1, int var2, int var3, String var4) { @@ -144,62 +101,62 @@ public class DBHelper { return this.cr.insert(ICContentProvider.DOWNLOADINFO_URL, var5); } - private void saveContactsImpl(ArrayList var1, boolean var2, boolean var3, boolean var4, boolean var5, boolean var6) { - StringBuilder var9 = new StringBuilder(); - var9.append("saveContactsImpl contactList = "); - var9.append(var1.toString()); - Logger.i(var9.toString()); - var9 = new StringBuilder("CATEGORY IN ("); - if (var2) { - var9.append(1); - var9.append(","); + private void saveContactsImpl(ArrayList contactArray, boolean admin, boolean care, boolean call, boolean partner, boolean video) { + StringBuilder log = new StringBuilder(); + log.append("saveContactsImpl contactList = "); + log.append(contactArray.toString()); + Logger.i(log.toString()); + StringBuilder where = new StringBuilder("CATEGORY IN ("); + if (admin) { + where.append(CATEGORY_ADMIN); + where.append(","); } - if (var3) { - var9.append(2); - var9.append(","); + if (care) { + where.append(CATEGORY_CARE); + where.append(","); } - if (var4) { - var9.append(3); - var9.append(","); + if (call) { + where.append(CATEGORY_CALL); + where.append(","); } - if (var5) { - var9.append(4); - var9.append(","); + if (partner) { + where.append(CATEGORY_PARTNER); + where.append(","); } - if (var6) { - var9.append(5); - var9.append(","); + if (video) { + where.append(CATEGORY_VIDEO); + where.append(","); } - int var7 = var9.length(); - if (var7 > 13) { - var9.setCharAt(var7 - 1, ')'); - this.deleteAllContact(var1, var9.toString(), this.cr); - int var8 = var1.size(); - if (var8 != 0) { - ContentValues[] var12 = new ContentValues[var8]; + int len = where.length(); + if (len > 13) { + where.setCharAt(len - 1, ')'); + this.deleteAllContact(contactArray, where.toString(), this.cr); + int contactCount = contactArray.size(); + if (contactCount != 0) { + ContentValues[] contentlist = new ContentValues[contactCount]; - for(var7 = 0; var7 < var8; ++var7) { - Contact var10 = (Contact)var1.get(var7); - ContentValues var11 = new ContentValues(); - var12[var7] = var11; - var11.put("CATEGORY", var10.category); - var11.put("NAME", var10.name); - var11.put("NUMBER", var10.number); - var11.put("ICON", var10.icon_index); - var11.put("EXTRA", var10.extra); - StringBuilder var13 = new StringBuilder(); - var13.append("contact="); - var13.append(var10.toString()); - Logger.i(var13.toString()); + for(int i = 0; i < contactCount; ++i) { + Contact contact = (Contact)contactArray.get(i); + ContentValues contentValues = new ContentValues(); + contentlist[i] = contentValues; + contentValues.put("CATEGORY", contact.category); + contentValues.put("NAME", contact.name); + contentValues.put("NUMBER", contact.number); + contentValues.put("ICON", contact.icon_index); + contentValues.put("EXTRA", contact.extra); + StringBuilder log1 = new StringBuilder(); + log1.append("contact="); + log1.append(contact.toString()); + Logger.i(log1.toString()); } - this.cr.bulkInsert(ICContentProvider.CONTACT_URI, var12); - this.addAllContact(var1, this.cr); + this.cr.bulkInsert(ICContentProvider.CONTACT_URI, contentlist); + this.addAllContact(contactArray, this.cr); } } @@ -242,10 +199,21 @@ public class DBHelper { this.cr.delete(var1, (String)null, (String[])null); } - public String getContactId(ContentResolver param1, String param2) { - // $FF: Couldn't be decompiled - - return ""; + public String DeleteContactId(ContentResolver contentResolver, String name) { + String ContactId=null; + Uri uri = ContactsContract.RawContacts.CONTENT_URI; + ContentResolver resolver = contentResolver; + String where = ContactsContract.PhoneLookup.DISPLAY_NAME; + Cursor cursor = resolver.query(uri, new String[]{Data._ID}, where + "=?", new String[]{name}, null); + if (cursor.moveToFirst()) { + int id = cursor.getInt(0); + ContactId=String.valueOf(id); + //根据id删除data中的相应数据 + resolver.delete(uri, where + "=?", new String[]{name}); + uri = ContactsContract.Data.CONTENT_URI; + resolver.delete(uri, ContactsContract.Data.RAW_CONTACT_ID + "=?", new String[]{id + ""}); + } + return ContactId; } public boolean getWeather() { @@ -770,18 +738,18 @@ public class DBHelper { this.context.sendBroadcast(new Intent("com.enqualcomm.support.ACTION_ANTIOFF_ALARM_CHANGE")); } - public void saveContacts(final ArrayList var1, final boolean var2, final boolean var3, final boolean var4, final boolean var5, final boolean var6) { + public void saveContacts(final ArrayList contactArray, boolean admin, boolean care, boolean call, boolean partner, boolean video) { synchronized(this){} try { - long var7 = SystemClock.elapsedRealtime(); - if (var7 - lastUpdateTime > 1000L) { - this.saveContactsImpl(var1, var2, var3, var4, var5, var6); - lastUpdateTime = var7; + long currenttime = SystemClock.elapsedRealtime(); + if (currenttime - lastUpdateTime > 1000L) { + this.saveContactsImpl(contactArray, admin, care,call, partner, video); + lastUpdateTime = currenttime; } else { Observable.timer(1000L, TimeUnit.MILLISECONDS).subscribe(new Action1() { public void call(Long var1x) { - DBHelper.this.saveContacts(var1, var2, var3, var4, var5, var6); + DBHelper.this.saveContacts(contactArray, admin, care,call, partner, video); } }); } diff --git a/app/src/main/java/com/ic/protocol/utils/NettyConnection.java b/app/src/main/java/com/ic/protocol/utils/NettyConnection.java index 37767a31..26b1d35a 100644 --- a/app/src/main/java/com/ic/protocol/utils/NettyConnection.java +++ b/app/src/main/java/com/ic/protocol/utils/NettyConnection.java @@ -102,7 +102,7 @@ public class NettyConnection implements Connection { break; case BP14: //收到设置白名单号码 - API.handleBP14(NettyConnection.this,cmd); + API.handleBP14(NettyConnection.this,cmd,runtime); Logger.i("收到服务器设置白名单号码命令BP14"); break; case BP15: diff --git a/app/src/main/java/com/ic/protocol/utils/Util.java b/app/src/main/java/com/ic/protocol/utils/Util.java index bc652294..4e82099c 100644 --- a/app/src/main/java/com/ic/protocol/utils/Util.java +++ b/app/src/main/java/com/ic/protocol/utils/Util.java @@ -59,7 +59,90 @@ public class Util { } return serverip.toString(); } + /** + * + * + * @param unicodestr + * @return + */ + public static String decodeUnicode2Utf8(String unicodestr) { + char aChar; + int len = unicodestr.length(); + if (len%4==0) { + + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < len; i += 4) { + sb.append("\\u").append(unicodestr.substring(i, i + 4)); + } + + String theString = sb.toString(); + len= theString.length(); + StringBuffer outBuffer = new StringBuffer(len); + for (int x = 0; x < len; ) { + aChar = theString.charAt(x++); + if (aChar == '\\') { + aChar = theString.charAt(x++); + if (aChar == 'u') { + // Read the xxxx + int value = 0; + for (int i = 0; i < 4; i++) { + aChar = theString.charAt(x++); + switch (aChar) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + value = (value << 4) + aChar - '0'; + break; + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + value = (value << 4) + 10 + aChar - 'a'; + break; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + value = (value << 4) + 10 + aChar - 'A'; + break; + default: + throw new IllegalArgumentException( + "Malformed \\uxxxx encoding."); + } + } + outBuffer.append((char) value); + } else { + if (aChar == 't') + aChar = '\t'; + else if (aChar == 'r') + aChar = '\r'; + else if (aChar == 'n') + aChar = '\n'; + else if (aChar == 'f') + aChar = '\f'; + outBuffer.append(aChar); + } + } else + outBuffer.append(aChar); + } + return outBuffer.toString(); + }else{ + return null; + } + + } public static String getSystemProperties(String prop){ String str ="";