Фильтр намерений не работает для экрана вызова - PullRequest
6 голосов
/ 01 декабря 2011

Я проектирую пользовательский экран вызова для отображения информации, такой как информация адресной книги вызывающего абонента, на экране во время телефонного разговора. Мое приложение запустится, когда пользователь нажмет кнопку вызова с помощью Intent Filter, после чего я получу другую информацию из адресной книги и добавлю ее на экран.

Моя проблема в том, что при нажатии кнопки вызова мой activity не запускается. Правильно ли мой фильтр намерений ? Можно ли вообще перехватить телефонный звонок Intent? Пожалуйста, поделитесь своими знаниями по обработке события вызова.

Мой Intent Filter показан ниже.

<activity android:name=".MyCallingScreen">
  <intent-filter android:priority="100">
    <action android:name="android.intent.action.CALL_BUTTON" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="tel" />
  </intent-filter>
</activity>    

Ответы [ 2 ]

4 голосов
/ 08 декабря 2011

В вашем случае попробуйте изменить свой код следующим образом:

<intent-filter android:priority="100">
    <action android:name="android.intent.action.CALL_BUTTON" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

Это будет работать для меня, если нажать на кнопку вызова.

Попробуйте использовать следующий код для перехвата вызова:

<activity>
  <intent-filter>
    <action android:name="android.intent.action.CALL_PRIVILEGED" />
    <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
</activity>

Для HTC есть некоторые изменения:

<activity>
  <intent-filter>
    <action android:name="android.intent.action.CALL_PRIVILEGED" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="vnd.android.cursor.item/phone" />
    <data android:mimeType="vnd.android.cursor.item/phone_v2" />
    <data android:mimeType="vnd.android.cursor.item/person" />
  </intent-filter>
</activity>

Намерение с действием android.intent.action.CALL_PRIVILEGED вызывается, когда вы звоните из телефонной книгиследующим образом: Телефонная книга-> Контакт-> Телефонный номер Длинное нажатие -> Выбрать вызов из выпадающего меню.

0 голосов
/ 12 декабря 2011

Я не уверен, возможно ли заменить экран вызова, но относительно просто перехватить любой исходящий вызов.Вы объявляете в своем манифесте получатель:

        <receiver android:name="com.mystuff.CallInterceptor" android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
        </intent-filter>
    </receiver>

и создаете Java-класс для этого перехватчика:

public class CallInterceptor extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
        if (!intent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL"))
        {
        return;
        }
        String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
        //do stuff using the number
        //assuming you do nothing too bad the call will happen and the regular
        //call screen comes up - but you can bring up another activity on top of it
        //for example shwing address info
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...