Shr*_*uti 15 android android-contacts
我正在关注这些链接以获取我的应用程序中的联系人
http://www.higherpass.com/Android/Tutorials/Working-With-Android-Contacts/
我可以在手机上显示联系人列表
-
我想在每个联系人处添加一个复选框,以便用户可以选择多个联系人,通过单击完成按钮,他应该能够获得他选择的所有联系人
另外,我想获取联系人姓名以及联系电话号码,请参阅我的代码:
if (resultCode == Activity.RESULT_OK) {
Uri contactData = data.getData();
Cursor c = managedQuery(contactData, null, null, null, null);
if (c.moveToFirst()) {
String name = c.getString(c
.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
String number = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER));
Log.v("name", name +" "+number);
// TODO Whatever you want to do with the selected contact
// name.
}
}
在log cat上它显示输出为:
01-09 12:46:41.688: V/name(699): Xyz 1
Run Code Online (Sandbox Code Playgroud)
这是联系人的名字是xyz,它至少有一个与之关联的电话号码.请帮助我如何获得与该联系人相关的号码.
编辑:
如果我String number = c.getString(c.getColumnIndexOrThrow(People.NUMBER));在代码中使用this()行,我会得到以下异常:
01-09 13:33:23.008: E/AndroidRuntime(786): FATAL EXCEPTION: main
01-09 13:33:23.008: E/AndroidRuntime(786): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.android.contacts/contacts/lookup/0r1-2C2E30/1 (has extras) }} to activity {sra.com/sra.com.ContactsDemo}: java.lang.IllegalArgumentException: column 'number' does not exist
01-09 13:33:23.008: E/AndroidRuntime(786): at android.app.ActivityThread.deliverResults(ActivityThread.java:3515)
01-09 13:33:23.008: E/AndroidRuntime(786): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3557)
01-09 13:33:23.008: E/AndroidRuntime(786): at android.app.ActivityThread.access$2800(ActivityThread.java:125)
01-09 13:33:23.008: E/AndroidRuntime(786): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2063)
01-09 13:33:23.008: E/AndroidRuntime(786): at android.os.Handler.dispatchMessage(Handler.java:99)
01-09 13:33:23.008: E/AndroidRuntime(786): at android.os.Looper.loop(Looper.java:123)
01-09 13:33:23.008: E/AndroidRuntime(786): at android.app.ActivityThread.main(ActivityThread.java:4627)
01-09 13:33:23.008: E/AndroidRuntime(786): at java.lang.reflect.Method.invokeNative(Native Method)
01-09 13:33:23.008: E/AndroidRuntime(786): at java.lang.reflect.Method.invoke(Method.java:521)
01-09 13:33:23.008: E/AndroidRuntime(786): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-09 13:33:23.008: E/AndroidRuntime(786): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-09 13:33:23.008: E/AndroidRuntime(786): at dalvik.system.NativeStart.main(Native Method)
01-09 13:33:23.008: E/AndroidRuntime(786): Caused by: java.lang.IllegalArgumentException: column 'number' does not exist
01-09 13:33:23.008: E/AndroidRuntime(786): at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314)
01-09 13:33:23.008: E/AndroidRuntime(786): at android.database.CursorWrapper.getColumnIndexOrThrow(CursorWrapper.java:99)
01-09 13:33:23.008: E/AndroidRuntime(786): at sra.com.ContactsDemo.onActivityResult(ContactsDemo.java:49)
01-09 13:33:23.008: E/AndroidRuntime(786): at android.app.Activity.dispatchActivityResult(Activity.java:3890)
01-09 13:33:23.008: E/AndroidRuntime(786): at android.app.ActivityThread.deliverResults(ActivityThread.java:3511)
01-09 13:33:23.008: E/AndroidRuntime(786): ... 11 more
Run Code Online (Sandbox Code Playgroud)
通过查看答案,我认为您可以获得如何获取联系人的答案,现在您希望获取活动中的选定联系人.
要获取特定于联系人姓名的联系号码:
ContentResolver contactResolver = getContentResolver();
Cursor cursor = contactResolver.query(Phone.CONTENT_URI, null, Phone.DISPLAY_NAME + "=?", new String[]{contactName}, null);
if(cursor.getCount() > 0){
cursor.moveToFirst();
do {
String number = cursor.getString(mCursor.getColumnIndex(Phone.NUMBER));
}while (cursor.moveToNext() );
}
Run Code Online (Sandbox Code Playgroud)
注意:以下contactName是您希望联系号码的联系人姓名.
我假设你已经在ListView中显示了联系人复选框,这是你的解决方案,用户可以选择用户选择的联系人列表:
1.开始您的联系活动startActivityForResult().
2.初始化ArrayList联系活动中的变量说出来contactArrayList.
3.当用户在此处checks the checkbox添加此联系人contactArrayList并继续添加,unchecks然后从中删除该联系人contactArrayList.
4.当用户按下完成后,使用您添加的所选联系人列表将结果设置为ok,contactArrayList如下所示:
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putStringArrayList("contacts", contactArrayList);
intent.putExtras(bundle);
setResult(RESULT_OK, intent);
Run Code Online (Sandbox Code Playgroud)
和finish()这个活动.
5.在您的呼叫活动覆盖上:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK && data != null ){
Bundle bundle = new Bundle();
bundle = data.getExtras();
ArrayList list = bundle.getStringArrayList("contacts");
}
}
Run Code Online (Sandbox Code Playgroud)
注意:上面的代码是在2.3.3上测试的.
| 归档时间: |
|
| 查看次数: |
17115 次 |
| 最近记录: |