我想编写与Contacts相关的应用程序.
场景:

查看联系号码,以便用户可以单击其中任何一个
我的应用程序将打开.
这是我到目前为止的地方:我在清单文件中添加了以下内容 -
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/name" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
结果是我可以看到所有联系人的MyApp图标,而不仅仅是电话号码,当我选择它时,我可以看到联系人姓名而不是可用的号码.

我必须添加到AndroidManifest以便查看联系人电话号码或在其中放置自定义文本?
android dialog android-manifest android-contentresolver android-contacts
我正在编写一个自定义的Android联系人目录,已经实现了ContactsContract.Directory提供程序,并且可以在电话应用程序中进行搜索。
我现在面临的问题是,当我有打入/打出电话时,Android拨号程序不会查询我注册的自定义目录。是否可以通过PhoneLookup或其他方式参与来电显示解析?
作为一种可能的解决方法,我尝试使用BroadcastReceiver实现呼出/呼入呼叫拦截器,但是我看不到将联系数据返回到拨号器的方法。我发现用于显示数据的唯一选项是将透明活动覆盖在本机拨号程序上。有没有一种方法可以将联系方式返回给发送广播的拨号程序?还有其他可以尝试的想法吗?
PS。Google使用了我正在尝试为附近地点的目录列表和Google来电显示提供的功能。
PPS。通过阅读PhoneLookup的ContactsContract实现,我偶然发现了公司联系人目录,该目录可以附加到用户配置文件的默认目录中,根据应为PhoneLookup查询的代码,所以我将在星期一尝试使用它。
每当添加或删除或更改联系人时,如何在我的应用程序中获得回调?是否有任何标准的广播意图,我可以为此注册BroadcastReceiver?
我需要显示一个自动完整的文本框,它基本上会加载联系人电子邮件ID.我已经尝试使用自定义适配器,但没有任何内容填充在文本框中.没有任何建议.任何解决方案都非常有用.
我正在构建一个应用程序,用户可以在其中安装此应用程序的设备的联系人(使用phoneNumber)进行交互(几乎是Whatsapp,Viber功能)
现在可以通过函数getContacts()实现此功能
但是,这会在添加/删除联系人或更新现有联系人的情况下导致同步问题
为此,我的知识指导我三种选择
请提供您的见解
我正在尝试使用以下代码获取手机通讯录中所有联系人的详细信息.但面临重复值的小问题.
EDITED
实际代码开头: -
private String refreshData() {
String emaildata = "";
try {
ContentResolver cr = getBaseContext().getContentResolver();
String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP
+ " = '" + ("1") + "'";
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME
+ " COLLATE LOCALIZED ASC";
Cursor cur = cr
.query(ContactsContract.Contacts.CONTENT_URI,
null,
selection
+ " AND "
+ ContactsContract.Contacts.HAS_PHONE_NUMBER
+ "=1", null, sortOrder);
if (cur.getCount() > 0) {
Log.i("Content provider", "Reading contact emails");
while (cur.moveToNext()) {
mContactSet.add(cur.getString(cur
.getColumnIndex(ContactsContract.Contacts._ID)));
}
} else {
emaildata += "Data not found."; …Run Code Online (Sandbox Code Playgroud) android contactscontract android-contentprovider android-contacts
我需要在创建新联系人后存储联系人ID值,以便能够在其他时刻引用它.例如,我创建了一个新联系人,之后我想从其联系人ID中删除它,因此我需要在创建新联系人后检索联系人ID值.这是我创建新联系人的方式:
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI).withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, tipoCuenta).withValue(ContactsContract.RawContacts.ACCOUNT_NAME, cuenta).build());
//Insert some data here....
c.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
//Here, I want to retrieve contact id
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我正在制作一个小应用程序,我可以使用内容提供商获取手机的联系人,并将其显示在列表视图中,如图所示.
我想选择列表视图的一行,并自动拨打该特定联系人的电话.我尝试了一些东西,但它们不起作用.有任何想法吗?这是我的代码.
public class MainActivity extends ListActivity implements AdapterView.OnItemClickListener{
ArrayAdapter<String> adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ContentResolver cr = getContentResolver();
Cursor c = cr.query(ContactsContract.Contacts.CONTENT_URI,
new String[] {ContactsContract.Contacts.DISPLAY_NAME},
null, null, null);
List<String> contacts = new ArrayList<String>();
if (c.moveToFirst()) {
do {
contacts.add(c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
} while (c.moveToNext());
}
adapter = new ArrayAdapter<String>(this, R.layout.activity_main, contacts);
setListAdapter(adapter);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//The answer should be inside here.
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个数组列表.
1)我的第ArrayList<String> some_num = new ArrayList<String>();一个包含这样的值.
[1111111111, 2222222222]
Run Code Online (Sandbox Code Playgroud)
现在我试图将此与我的移动联系人进行比较.
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String[] projection = new String[] {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER};
Cursor people = getActivity().getContentResolver().query(uri, projection, null, null, null);
int indexName = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
int indexNumber = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
int j_count=0;
String number;
people.moveToFirst();
do {
String name = people.getString(indexName);
number = people.getString(indexNumber);
j_count++;
// Do work...
} while (people.moveToNext());
for(int j=0;j<=j_count;j++){
if (some_num.contains(number)){
// do nothing
}
else{
Log.e("num",number);
}
}
Run Code Online (Sandbox Code Playgroud)
我试图从移动电话簿中获取我的ArrayList中不存在的那些数字.我知道在条件中我必须获得数组的值,但是当我尝试这样做时,我没有得到其余的联系.
提前致谢
基本上,我需要实现的目标非常明确,但是我在实现过程中存在很多疑问。我进行了有关此主题的研发,但未找到满意的答案。希望你们能理解我并进一步帮助我。
所以这是我想做的屏幕截图:
联系人详细信息页面

到目前为止,我所做的是:
Manifest.xml
<activity
android:name=".AddCardActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<!--<data android:mimeType="vnd.android.cursor.item/vnd.ccc.in.businesscard" />-->
</intent-filter>
</activity>
<service
android:name=".customcontact.AccountAuthenticatorService"
android:exported="true"
android:process=":auth">
<intent-filter>
<action android:name="android.accounts.AccountAuthenticator" />
</intent-filter>
<meta-data
android:name="android.accounts.AccountAuthenticator"
android:resource="@xml/authenticator" />
</service>
<service
android:name=".customcontact.ContactsSyncAdapterService"
android:exported="true"
android:process=":contacts">
<intent-filter>
<action android:name="android.content.SyncAdapter" />
</intent-filter>
<meta-data
android:name="android.content.SyncAdapter"
android:resource="@xml/sync_contacts" />
<meta-data
android:name="android.provider.CONTACTS_STRUCTURE"
android:resource="@xml/contacts" />
</service>
Run Code Online (Sandbox Code Playgroud)
在这里我需要定义intent-filter标签mime-type吗?如果mime-type以上定义,我的应用程序未在设备的应用程序列表中列出。
Manifest.XML中的权限:
<uses-permission
android:name="android.permission.AUTHENTICATE_ACCOUNTS"
android:maxSdkVersion="22" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" …Run Code Online (Sandbox Code Playgroud)