我正在制作Android应用,需要拨打电话的联系人列表.我需要调用联系人列表功能,选择联系人,然后使用联系人姓名返回我的应用程序.这是我在互联网上获得的代码,但它不起作用.
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.Contacts.People;
import android.view.View;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
public class Contacts extends ListActivity {
private ListAdapter mAdapter;
public TextView pbContact;
public static String PBCONTACT;
public static final int ACTIVITY_EDIT=1;
private static final int ACTIVITY_CREATE=0;
// Called when the activity is first created.
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Cursor C = getContentResolver().query(People.CONTENT_URI, null, null, null, null);
startManagingCursor(C);
String[] columns = new String[] {People.NAME};
int[] names = …Run Code Online (Sandbox Code Playgroud) 自从更新到iOS 6后,我注意到我在iPhone地址簿中添加联系人的代码不再有效.我相信这是一个与权限相关的问题,因为Apple在访问联系人之前现在需要用户权限(修复此问题).
我希望应用程序能够自动请求访问联系人的权限,如下面的屏幕截图所示,但事实并非如此.尝试添加联系人失败了ABAddressBookErrorDomain error 1.
我是否需要以编程方式启动对联系人请求对话框的访问?怎么做的?

我正在研究Android 2.0,我正在尝试接收所有联系人的列表.
由于android.provider.Contacts.People已过时,我不得不使用android.provider.ContactsContract,但我不能找到如何使用适当的例子(例如:检索电话簿的所有联系人的列表).
谁知道在哪里可以找到这样的例子?
在iOS 9中不推荐使用AddressBook框架的大部分内容.在新的Contacts Framework 文档中,只显示了如何获取与a匹配的记录NSPredicate,但如果我想要所有记录呢?
我正在使用此代码检索所有联系人姓名和电话号码:
String[] projection = new String[]
{
People.NAME,
People.NUMBER
};
Cursor c = ctx.getContentResolver().query(People.CONTENT_URI, projection, null, null, People.NAME + " ASC");
c.moveToFirst();
int nameCol = c.getColumnIndex(People.NAME);
int numCol = c.getColumnIndex(People.NUMBER);
int nContacts = c.getCount();
do
{
// Do something
} while(c.moveToNext());
Run Code Online (Sandbox Code Playgroud)
但是,这只会返回每个联系人的主号码,但我也想获得次要号码.我怎样才能做到这一点?
我正在尝试从本机数据库中获取其显示名称和电话号码(任意或所有)的联系人列表.有许多方法可以通过对手机数据库的多个查询来获取此信息,但这会带来相当大的开销.
这是我一直在研究的查询,但结果却是
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] { ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER};
String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = '1'";
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
Cursor people = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);
int index_id = people.getColumnIndex(ContactsContract.Contacts._ID);
int indexName = people.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
int indexNumber = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
people.moveToFirst();
do {
String _id = people.getString(index_id);
String name = people.getString(indexName);
String number = people.getString(indexNumber);
// Do work...
} while (people.moveToNext());
Run Code Online (Sandbox Code Playgroud)
这是由此产生的错误.
E/AndroidRuntime(21549): Caused …Run Code Online (Sandbox Code Playgroud) Heyo!有没有办法当用户点击按钮时,它可以将联系人添加或更新到实际的Apple通讯录中?一些节日的电子邮件回复包括接收者可以在其联系簿中下载和查找的"名片".
我正在尝试拨打联系人选择器,将人名,电话和电子邮件发送到字符串中,并使用意图将其发送到另一个活动.到目前为止,这工作:
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, 1);
// ...
@Override
public void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);
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));
Intent intent = new Intent(CurrentActivity.this, NewActivity.class);
intent.putExtra("name", name);
startActivityForResult(intent, 0);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但如果我加入:
String number = c.getString(c.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
Run Code Online (Sandbox Code Playgroud)
它强行关闭
也许是获得他们号码的另一种方式?
当我尝试从手机读取联系人时,我收到此错误,并且我READ_CONTACTS在Manifest文件中包含了权限.奇怪的是它在Eclipse中运行良好,但当我将项目转换为Gradle并在Android Studio中运行时,我收到此错误.
logcat说:
权限拒绝:从ProcessRecord打开提供程序com.android.providers.contacts.ContactsProvider2 {302f069 29282:com.GP/u0a322}(pid = 29282,uid = 10322)需要android.permission.READ_CONTACTS或android.permission.WRITE_CONTACTS
这是清单代码:
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19" />
<!-- Read Contacts from phone -->
<uses-permission android:name="android.permission.read_contacts" />
<uses-permission android:name="android.permission.read_phone_state" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
Run Code Online (Sandbox Code Playgroud) permissions android contacts android-contacts android-studio
有没有办法将返回的行数限制为游标?我有一个有大约4000个联系人的电话,我只需要其中一些.
这是我正在使用的代码
db = new dBHelper(this);
ContentResolver cr = getContentResolver();
Cursor cursor;
cursor = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, ContactName + " ASC");
Log.i(TAG, CLASSNAME + " got contacts entries");
for (int it = 0; it <100 ; it++){//cursor.getCount()
Log.i(TAG, CLASSNAME + " getting string");
String mytimes_contacted = cursor.getString(cursor.getColumnIndex(dBHelper.times_contacted));
Log.i(TAG, CLASSNAME + " done from the string");
}
Run Code Online (Sandbox Code Playgroud)
我得到的日志是
I/Check(11506): [ContactsPicker] got contacts entries
I/Check(11506): [ContactsPicker] getting first string
D/AndroidRuntime(11506): Shutting down VM
W/dalvikvm(11506): threadid=1: thread exiting with uncaught exception (group=0x2aac8578)
D/dalvikvm(11541): …Run Code Online (Sandbox Code Playgroud) contacts ×10
android ×7
ios ×3
iphone ×2
database ×1
email ×1
ios6 ×1
ios9 ×1
nspredicate ×1
objective-c ×1
permissions ×1
phone-number ×1
uibutton ×1