【发布时间】:2017-01-25 10:56:41
【问题描述】:
您知道何时有未知号码呼叫您,而不是号码,您看到的是实际呼叫您的公司名称。据我所知,Android 通过一些谷歌服务获取这些信息。
如果我想制作一个应用程序,我应该怎么做?如果未知号码呼叫您,我希望 Android 要求我的应用程序提供此号码的信息。
我在文档中搜索found this。这里说:
目录最重要的用例是搜索。目录提供程序应至少支持 Contacts.CONTENT_FILTER_URI。如果目录提供商想要参与电子邮件和电话查找功能,它还应该实现 CommonDataKinds.Email.CONTENT_FILTER_URI 和 CommonDataKinds.Phone.CONTENT_FILTER_URI。
据我了解,我需要实现一个 ContactsContract.Directory。我尝试了一些东西,但我无法让它工作。
你能告诉我我应该怎么做吗,你能给我一个关于提供联系信息如何工作的很好的解释吗?这个目录的一个很好的例子也很好。
编辑: 我尝试了什么 - 我创建了一个示例应用程序,创建了自己的提供程序并将其注册到清单中。我添加了所需的元数据,如文档所示:
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.sample.contactprovidertest">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<provider
android:authorities="com.sample.contactprovidertest"
android:name=".MyProvider"
android:enabled="true"
android:exported="true">
<meta-data
android:name="android.content.ContactDirectory"
android:value="true"/>
</provider>
</application>
</manifest>
MyProvider.java
public class MyProvider extends ContentProvider {
private static final String TAG = "MyProvider";
@Override
public boolean onCreate() {
return true;
}
@Nullable
@Override
public Cursor query(Uri uri,
String[] projection,
String selection,
String[] selectionArgs,
String sortOrder) {
// this is never called
Toast.makeText(getContext(), "it works!", Toast.LENGTH_SHORT).show();
if (ContactsContract.Directory.CONTENT_URI.equals(uri)) {
Log.d(TAG, "query: " + uri);
}
return null;
}
@Nullable
@Override
public String getType(Uri uri) {
return null;
}
@Nullable
@Override
public Uri insert(Uri uri, ContentValues values) {
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
return 0;
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
return 0;
}
}
【问题讨论】:
-
I tried something but I can't get it to work.- 您可以发布您尝试过的内容吗?也许我们可以找到它的问题。 -
@MichaelDodd 我添加了我的样本。即使我们发现了问题,解释一下这个东西是如何工作的也是很好的。感谢您的回复。
标签: android android-contentprovider android-contacts contactscontract