我有一个自定义列表视图,我需要以字母顺序显示联系人,你可以提供示例代码,我该如何实现这一目标?
有没有办法获得Android手机拥有者的名字和姓氏?我在互联网上搜索,但我没有运气.我在Stackoverlow中偶然发现了这个问题,但这是得到所有联系人的名字和姓氏.我需要的只是获取所有者的名字和姓氏.
给定联系人ID,我可以通过对每个字段进行不同的查询来获取各种联系人详细信息(如姓名,电话,电子邮件ID等).
但有没有一种方法可以通过单个查询获取与此联系人ID相关的所有详细信息?
我正在制作短信应用程序并希望访问我的Android应用程序中的联系人.
我想访问联系人,就像他们在实际联系人列表中的位置一样.选择后,我需要返回到我可以向该人发送短信的活动.或者是否可以访问存储联系人的数据库?
我的代码如下所示:
String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
String no = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
Run Code Online (Sandbox Code Playgroud)
我的LogCat看起来像这样:
09-07 12:46:15.458: DEBUG/AndroidRuntime(473): Shutting down VM
09-07 12:46:15.458: WARN/dalvikvm(473): threadid=1: thread exiting with uncaught exception (group=0x40015560)
09-07 12:46:15.478: ERROR/AndroidRuntime(473): FATAL EXCEPTION: main
09-07 12:46:15.478: ERROR/AndroidRuntime(473): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { dat=content://com.android.contacts/contacts/lookup/0r1-512D3F3D533B/1 flg=0x1 (has extras) }} to activity {task.list/task.list.Msgactivity}: java.lang.IllegalArgumentException: column 'data1' does not exist
09-07 12:46:15.478: ERROR/AndroidRuntime(473): at android.app.ActivityThread.deliverResults(ActivityThread.java:2532)
09-07 12:46:15.478: ERROR/AndroidRuntime(473): at android.app.ActivityThread.handleSendResult(ActivityThread.java:2574)
09-07 12:46:15.478: ERROR/AndroidRuntime(473): at android.app.ActivityThread.access$2000(ActivityThread.java:117)
09-07 …Run Code Online (Sandbox Code Playgroud) 现在,我可以检索电话号码并将editText的文本设置为该号码.但是,当我尝试获取姓氏或名字时,它不起作用.请注意我评论的内容.
继承我的代码:
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class main extends Activity {
private static final int CONTACT_PICKER_RESULT = 1001;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button getContacts = (Button)findViewById(R.id.getContacts);
getContacts.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(Intent.ACTION_PICK,
ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
startActivityForResult(i, CONTACT_PICKER_RESULT);
}
});
}
protected void onActivityResult(int reqCode, …Run Code Online (Sandbox Code Playgroud) 所有我想从我的应用程序数据库中的android电话簿中获取数字..我已经尝试了下面的代码,但这里得到的人的名字,而不是我想从电话簿号码,并希望将其存储在我的数据库..如何实现这一目标可以任何人指导我..
@Override
public void onActivityResult(int reqCode, int resultCode, Intent data){
super.onActivityResult(reqCode, resultCode, data);
switch(reqCode){
case (PICK_CONTACT):
if (resultCode == Activity.RESULT_OK){
Uri contactData = data.getData();
Cursor c = managedQuery(contactData, null, null, null, null);
if (c.moveToFirst()){
// other data is available for the Contact. I have decided
// to only get the name of the Contact.
String name = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.CONTENT_TYPE));
Toast.makeText(getApplicationContext(), name, Toast.LENGTH_SHORT).show();
}
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢 -
内容提供商是读取/写入私人数据(如短信和联系人)的唯一方式吗?我首先尝试简单和懒惰的方式(复制短信和联系SQLite数据库文件),但我遇到了一些许可问题.我问,因为我正在尝试备份和恢复短信和联系人,这将是很多工作逐个访问数据字段.
有没有办法以编程方式将联系人添加到内部电话通讯录中作为“电话联系人”?
我试过了:
list.add(ContentProviderOperation
.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
.build());
Run Code Online (Sandbox Code Playgroud)
使用此参数,联系人成功保存到手机,但如果我将过滤器设置为“仅显示手机联系人” - 不会显示创建的联系人。顺便说一句,我读过nulltype 的联系人可能会丢失干燥帐户同步(不记得完整的案例)
然后我尝试从现有的电话联系人中检索ACCOUNT_TYPE和ACCOUNT_NAME获取Phone和Local Phone Account字符串,但是当我尝试使用相同的参数保存联系人时:
list.add(ContentProviderOperation
.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, "Phone")
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, "Local Phone Account")
.build());
Run Code Online (Sandbox Code Playgroud)
结果与nulltype的第一种情况相同。
是否有任何常量(或者应该是另一种方式)来保存“电话联系人”等数据?