1

Вы знаете, когда неизвестный номер вызывает вас, а вместо номера вы видите имя компании, которая на самом деле звонит вам. Насколько я знаю, 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; 
    } 
} 
+0

'Я пытался что-то, но я не могу заставить его work.' - Можете ли вы после того, что вы уже пробовали? Может быть, мы сможем найти проблему. –

+0

@MichaelDodd Я добавил свой образец. Даже если мы найдем проблему, объяснение о том, как это работает, будет хорошим. Спасибо за ваш ответ. – definera

ответ

0

Из документов вы связаны с:

Клиент взаимодействует с каталогом через Поставщик услуг по адресу , поставляя необязательный параметр каталога = запрос.

Когда Контакты Поставщик получает запрос, он преобразует URI и перенаправляет запрос к соответствующему содержанию каталога поставщика

Когда приложение входящего вызова запускает в ответ на входящий вызов, то запрашивает Contacts Provider для локальных контактов, а также может предоставить параметр directory= для Google Global Address List в качестве резервного поиска, если его не найти локально.

Я не думаю, что есть способ попросить приложение входящего вызова запросить и ваш каталог.

ЧТО ВЫ МОЖЕТЕ СДЕЛАТЬ:

Что все приложения ИД вызывающего абонента сделать, показать всплывающее диалоговое окно в верхней части экрана входящего вызова. См How to create always-top fullscreen overlay activity in Android

и читать онлайн о LayoutParams.TYPE_SYSTEM_ALERT

+0

В моем приложении для телефона (в Нуге) я вижу варианты для поставщиков «прямого поиска», «поиск людей» и «обратного поиска»; когда выбрано, я получаю выбор поставщиков из списка. Таким образом, похоже, что можно добавить больше каталогов, я просто не знаю, как там появились существующие. – retorquere

 Смежные вопросы

  • Нет связанных вопросов^_^