Weex

weex☞获取通讯录

2018-12-03  本文已影响18人  小学生的博客

获取通讯录、扫码、打开相册、拍照等操作,都是一个套路,就是创建module,原生实现这些方法,前端调用是时候返回最终的结果。
下面是如何获取通信录代码,不知道有没有更好的策略。

public class pickPhone extends WXModule {
    String stringBuffer = "";
    protected JSCallback callback;

    @JSMethod(uiThread = false)
    public void open(JSCallback callback) {
        ((Activity) (mWXSDKInstance.getContext())).startActivityForResult(new Intent(Intent.ACTION_PICK,
                ContactsContract.Contacts.CONTENT_URI), 0);

        this.callback = callback;
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 0) {

            ContentResolver reContentResolverol = mWXSDKInstance.getContext()
                    .getContentResolver();
            if (data == null) {
                return;
            }
            Uri contactData = data.getData();
            @SuppressWarnings("deprecation")
            Cursor cursor = ((Activity) (mWXSDKInstance.getContext())).managedQuery(contactData, null, null,
                    null, null);
            if (cursor == null) {
                return;
            }
            cursor.moveToFirst();
            if (cursor.getCount() == 0) {
                Toast.makeText(mWXSDKInstance.getContext(), "您拒绝了访问通讯录,请设置访问权限!", Toast.LENGTH_SHORT).show();
                return;
            }
            String contactId = cursor.getString(cursor
                    .getColumnIndex(ContactsContract.Contacts._ID));
            Cursor phone = reContentResolverol.query(
                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = "
                            + contactId, null, null);
            ArrayList<String> contactList = new ArrayList<String>();
            while (phone.moveToNext()) {
                stringBuffer = phone
                        .getString(phone
                                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                stringBuffer = stringBuffer.replace("+86", "");
                stringBuffer = stringBuffer.replace(" ", "");
                stringBuffer = stringBuffer.replace("-", "");
                stringBuffer = stringBuffer.replace("——", "");
                contactList.add(stringBuffer);
            }
            if (null == contactList || 0 == contactList.size()) {
                Toast.makeText(mWXSDKInstance.getContext(), "该联系人没有可用手机号码!",
                        Toast.LENGTH_SHORT).show();
                return;
            }
            if (contactList.size() > 1) {
                final String[] contactArr = new String[contactList.size()];
                for (int i = 0; i < contactArr.length; i++) {
                    contactArr[i] = contactList.get(i);
                }
                new AlertDialog.Builder(mWXSDKInstance.getContext())
                        .setTitle("请选择充值号码")
                        .setSingleChoiceItems(contactArr, 0,
                                new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog,
                                                        int which) {
                                        // TODO Auto-generated
                                        // method stub
                                        stringBuffer = contactArr[which];
                                        dialog.dismiss();
                                    }
                                }).show();
            } else {
                stringBuffer = contactList.get(0);
            }

            Log.d("my-tag", stringBuffer);

            Map<String, Object> params = new HashMap<>();
            params.put("data", stringBuffer);
            callback.invoke(stringBuffer);
        }
    }
}

配置相应的权限,在WXApplication中加入

   WXSDKEngine.registerModule("pickPhone", pickPhone.class);

然后就是前端调用

const pickPhone = weex.requireModule('pickPhone')
...         //在方法中直接使用就行了
            pickPhone .open(res => {
                   ...
                })
上一篇下一篇

猜你喜欢

热点阅读