Просмотр исходного кода

添加js获取通讯录的方法

zengjiebin лет назад: 7
Родитель
Сommit
df226a0c76

+ 2 - 0
app/src/main/AndroidManifest.xml

@@ -91,6 +91,8 @@
     <uses-permission android:name="android.permission.CAMERA" />
     <uses-permission android:name="android.permission.RECORD_AUDIO" />
     <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.READ_CONTACTS" />
+    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
 
     <uses-feature android:name="android.hardware.camera" />
     <uses-feature android:name="android.hardware.camera.autofocus" />

+ 126 - 0
app/src/main/java/com/sheep/gamegroup/util/ContactUtil.java

@@ -0,0 +1,126 @@
+package com.sheep.gamegroup.util;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.ContactsContract;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.sheep.gamegroup.model.entity.BaseMessage;
+import com.sheep.gamegroup.model.util.SheepSubscriber;
+import com.sheep.jiuyan.samllsheep.SheepApp;
+import com.sheep.jiuyan.samllsheep.utils.G;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import io.reactivex.Observable;
+import io.reactivex.ObservableEmitter;
+import io.reactivex.ObservableOnSubscribe;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+import rx.functions.Action1;
+
+/**
+ * Created by realicing on 2019/3/19.
+ * realicing@sina.com
+ */
+public class ContactUtil {
+
+    /**
+     * 获取通讯录中所有联系人的简单信息
+     *
+     * @throws Throwable
+     */
+    public static List<Map<String, String> > getAllContact(Context context) throws Throwable {
+
+        List<Map<String, String> > list = new ArrayList<>();
+        Map<String, String> contactIdMap = new HashMap<String, String>();
+        //获取联系人信息的Uri
+        Uri uri = ContactsContract.Contacts.CONTENT_URI;
+        //获取ContentResolver
+        ContentResolver contentResolver = context.getContentResolver();
+        //查询数据,返回Cursor
+        Cursor cursor = contentResolver.query(uri, null, null, null, null);
+        if (cursor == null) {
+            return list;
+        }
+        while (cursor.moveToNext()) {
+            //获取联系人的ID
+            String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
+            if (contactIdMap.containsKey(contactId)) {
+                continue;
+            }
+            contactIdMap.put(contactId, contactId);
+            Map<String, String> map = new HashMap<>();
+            //获取联系人的姓名
+            String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
+            map.put("name", name);
+            //查询电话类型的数据操作
+            Cursor phones = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
+                    null,
+                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId,
+                    null, null);
+            if(phones != null) {
+                while (phones.moveToNext()) {
+                    String phoneNumber = phones.getString(phones.getColumnIndex(
+                            ContactsContract.CommonDataKinds.Phone.NUMBER));
+                    //添加Phone的信息
+                    map.put("mobile", phoneNumber);
+                }
+                phones.close();
+            }
+
+//            //查询Email类型的数据操作
+//            Cursor emails = contentResolver.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
+//                    null,
+//                    ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId,
+//                    null, null);
+//            while (emails.moveToNext()) {
+//                String emailAddress = emails.getString(emails.getColumnIndex(
+//                        ContactsContract.CommonDataKinds.Email.DATA));
+//                //添加Email的信息
+//                contactBean.put("emailAddress", emailAddress);
+//            }
+//            emails.close();
+            list.add(map);
+        }
+        cursor.close();
+        return list;
+    }
+
+
+    public static void getAllContactList(Action1<String> action1) {
+        Observable.create((ObservableOnSubscribe<BaseMessage>) observableEmitter -> {
+            BaseMessage baseMessage = new BaseMessage();
+            try {
+                List<Map<String, String>> list = getAllContact(SheepApp.getInstance());
+                baseMessage.setCode(200);
+                baseMessage.setData(list);
+                baseMessage.setTotal(ListUtil.size(list));
+            } catch (Throwable throwable) {
+                throwable.printStackTrace();
+                baseMessage.setMsg(throwable.getMessage());
+                baseMessage.setCode(500);
+            }
+            observableEmitter.onNext(baseMessage);
+        })
+            .subscribeOn(Schedulers.io())
+            .observeOn(AndroidSchedulers.mainThread())
+            .subscribe(new SheepSubscriber<BaseMessage>(SheepApp.getInstance()) {
+                @Override
+                public void onNext(BaseMessage baseMessage) {
+                    action1.call(JSON.toJSONString(baseMessage));
+                }
+
+                @Override
+                public void onError(BaseMessage baseMessage) {
+                    action1.call(JSON.toJSONString(baseMessage));
+                }
+            });
+    }
+}

+ 7 - 0
app/src/main/java/com/sheep/gamegroup/util/js/KFZSJs.java

@@ -19,6 +19,7 @@ import com.sheep.gamegroup.module.user.model.TempUserResp;
 import com.sheep.gamegroup.util.ApiJSONUtil;
 import com.sheep.gamegroup.util.ApiUtil;
 import com.sheep.gamegroup.util.CommonUtil;
+import com.sheep.gamegroup.util.ContactUtil;
 import com.sheep.gamegroup.util.DataUtil;
 import com.sheep.gamegroup.util.DeviceUtil;
 import com.sheep.gamegroup.util.Jump2View;
@@ -39,6 +40,7 @@ import com.sheep.jiuyan.samllsheep.utils.PackageUtil;
 import com.sheep.jiuyan.samllsheep.utils.SpUtils;
 import com.sheep.jiuyan.samllsheep.utils.TitleBarUtils;
 
+import java.util.List;
 import java.util.Locale;
 
 import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -406,4 +408,9 @@ public class KFZSJs {
                     }
                 });
     }
+
+    @JavascriptInterface
+    public void getAllContact() {
+        ContactUtil.getAllContactList(result -> activity.loadJs(String.format(Locale.CHINA, "onGetAllContact('%s')", result)));
+    }
 }

+ 2 - 0
app/src/main/java/com/sheep/gamegroup/view/activity/SplashAct.java

@@ -96,6 +96,8 @@ public class SplashAct extends BaseActivity implements EasyPermissions.Permissio
             Manifest.permission.ACCESS_COARSE_LOCATION,
             Manifest.permission.ACCESS_FINE_LOCATION,
             Manifest.permission.CAMERA,
+            Manifest.permission.READ_CONTACTS,
+            Manifest.permission.WRITE_CONTACTS,
             Manifest.permission.READ_PHONE_STATE
     };
     private RxjavaCountDownTimer timer;