Вы знаете, когда неизвестный номер вызывает вас, а вместо номера вы видите имя компании, которая на самом деле звонит вам. Насколько я знаю, Android получает эту информацию через некоторые сервисы google.Предоставить контактную информацию для неизвестного номера
Что делать, если я хочу сделать приложение, которое делает то же самое? Если вам звонит неизвестный номер, я хочу, чтобы Android попросил мое приложение предоставить информацию для этого номера.
Мой поиск found this в документации. Здесь сказано:
Самый важный прецедент для каталогов - поиск. Предполагается, что поставщик каталогов будет поддерживать, по крайней мере, Contacts.CONTENT_FILTER_URI. Если поставщик каталога хочет участвовать в функциях поиска по электронной почте и телефону, он также должен реализовать CommonDataKinds.Email.CONTENT_FILTER_URI и CommonDataKinds.Phone.CONTENT_FILTER_URI.
Насколько я понимаю, мне нужно реализовать каталог ContactsContract.Directory. Я что-то пробовал, но я не могу заставить его работать.
Можете ли вы сказать мне, что мне следует делать, можете ли вы сослаться на хорошее объяснение того, как работает контактная информация? Хорошим примером для этого каталога тоже будет хорошо.
EDIT: Что я пытался - я создал образец приложения, создал своего собственного провайдера и зарегистрировал его в манифесте. Я добавил необходимые мета-данные, как показано в документации:
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;
}
}
'Я пытался что-то, но я не могу заставить его work.' - Можете ли вы после того, что вы уже пробовали? Может быть, мы сможем найти проблему. –
@MichaelDodd Я добавил свой образец. Даже если мы найдем проблему, объяснение о том, как это работает, будет хорошим. Спасибо за ваш ответ. – definera