当前位置: 源码素材网 » Android教程 » 详情页

Android 使用Bmob第三方后台数据同步联系人

  •   时间:2019-05-25
  • 概述:同步联系人 Bmob

Android 使用Bmob第三方后台数据同步联系人,主要实现将手机联系人数据同步到第三方的后台,再从第三方后台将联系人数据同步到其他的手机上。Bomb官方提供了很多从服务器获取数据的方法,本实例将根据时间获取服务器的数据,并将获取到的数据添加到手机中。相关的代码,可从以下代码中了解:

/**
 * 根据时间从后台获取数据
 * */
private void getData() {
    BmobQuery<Contact> query = new BmobQuery<Contact>();
    List<BmobQuery<Contact>> and = new ArrayList<BmobQuery<Contact>>();
    //大于00:00:00
    BmobQuery<Contact> q1 = new BmobQuery<Contact>();
    String start = "2017-01-01 13:47:42";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date = null;
    try {
        date = sdf.parse(start);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    q1.addWhereGreaterThanOrEqualTo("createdAt", new BmobDate(date));
    and.add(q1);
    query.and(and);
    query.findObjects(new FindListener<Contact>() {
        @Override
        public void done(List<Contact> list, BmobException e) {
            for (int i = 0; i < list.size(); i++) {
                testAddContacts(list.get(i).getName(), list.get(i).getNum());
            }
        }
    });
}
/**
 * 向后台发送联系人数据
 */
public void upData(String name, String number) {
    obj.setName(name);
    obj.setNum(number);
    obj.save(new SaveListener<String>() {
        @Override
        public void done(String s, BmobException e) {
            Log.e("------", s);
        }
    });
}
/**
 * 从手机中获取联系人
 */
private void getPhoneContacts() {
    List<Contact> list = new ArrayList();
    final String[] PHONES_PROJECTION = new String[]{
            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER};
    ContentResolver resolver = getContentResolver();
    try {
        // 获取手机联系人
        Cursor phoneCursor = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                PHONES_PROJECTION, null, null, null);
        if (phoneCursor != null) {
            while (phoneCursor.moveToNext()) {
                // 得到手机号码
                String phoneNumber = phoneCursor
                        .getString(1);
                // 当手机号码为空的或者为空字段 跳过当前循环
                if (TextUtils.isEmpty(phoneNumber))
                    continue;
                // 得到联系人名称
                String contactName = phoneCursor
                        .getString(0);
                //创建实体类解析联系人
                Contact mContact = new Contact(contactName, phoneNumber);
                list.add(mContact);  //添加到集合里
            }
            phoneCursor.close();  //关流
            setData(list);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
private void setData(List<Contact> list) {
    if (list != null && list.size() > 0) {
        for (int i = 0; i < list.size(); i++) {
            upData(list.get(i).getName(), list.get(i).getNum());
        }
        Toast.makeText(this, "联系人同步完成", Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(this, "手机中暂无联系人", Toast.LENGTH_SHORT).show();
    }
}
/**
 * 添加联系人
 * 数据一个表一个表的添加,每次都调用insert方法
 */
public void testAddContacts(String name, String num) {
    /**
     * 往 raw_contacts 中添加数据,并获取添加的id号
     **/
    Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
    ContentResolver resolver = this.getContentResolver();
    ContentValues values = new ContentValues();
    long contactId = ContentUris.parseId(resolver.insert(uri, values));
    /* 往 data 中添加数据(要根据前面获取的id号) */
    // 添加姓名
    uri = Uri.parse("content://com.android.contacts/data");
    values.put("raw_contact_id", contactId);
    values.put("mimetype", "vnd.android.cursor.item/name");
    values.put("data2", name);
    resolver.insert(uri, values);
    // 添加电话
    values.clear();
    values.put("raw_contact_id", contactId);
    values.put("mimetype", "vnd.android.cursor.item/phone_v2");
    values.put("data2", "2");
    values.put("data1", num);
    resolver.insert(uri, values);
}

使用Bomb服务,要使用该服务,需要先申请Bmob账号,并创建应用和表。申请帐号这里就不介绍了。

    相关声明:

      若“Android 使用Bmob第三方后台数据同步联系人”有损您的权益,请告之我们删除内容。
      部分文章来源于网络,版权归原作者所有。