您知道当一个未知号码呼叫您时,您会看到实际呼叫您的公司名称而不是号码。据我所知,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;
}
}
答案 0 :(得分:0)
来自您链接到的文档:
客户端通过Contacts Provider by与目录进行交互 提供可选的directory =查询参数。
当联系人提供程序收到请求时,它会转换URI 并将请求转发到相应的目录内容 提供商
当来电呼叫应用作为对来电的响应启动时,它会向Contacts Provider
查询本地联系人,还可能会为Google的directory=
提供Global Address List
参数作为如果在本地找不到,则进行后备搜索。
我认为有一种方法可以要求来电应用程序同时询问您的目录。
您可以做什么:
所有来电显示的应用都会在来电屏幕上显示弹出对话框。 见How to create always-top fullscreen overlay activity in Android
在线阅读LayoutParams.TYPE_SYSTEM_ALERT