Как использовать android.intent.action.CALL_PRIVILEGED и android.intent.action.NEW_OUTGOING_CALL?
Я не могу найти документацию для:
android.intent.action.CALL_PRIVILEGED
Я видел, что он используется, например, в csipsimple для обработки вызова.
Я хотел бы лучше понять, как его использовать. Например: какова связь между android.intent.action.CALL_PRIVILEGED
а также android.intent.action.NEW_OUTGOING_CALL
?
Я добавил:
<intent-filter>
<action android:name="android.intent.action.CALL_PRIVILEGED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tel" />
</intent-filter>
в AndroidManifest для моего проекта. Когда вызов начинается с родного номеронабирателя, моя деятельность вызывается, но если в onResume я делаю getIntent(). GetAction(), результат равен нулю
РЕДАКТИРОВАТЬ
Я сделал так, чтобы он работал как с onNewIntent, так и с onCreate. OnResume получает намерение без действия (я полагаю, отправляется обработчиком onNewIntent по умолчанию).
Проблема в том, что для проверки, является ли действие CALL_PRIVILEGED, мне пришлось жестко закодировать строку "android.intent.action.CALL_PRIVILEGED", потому что действие CALL_PRIVILEGED скрыто.
Я пытался зарегистрировать активность только для ACTION_CALL, и она не работала
3 ответа
Намерение с действием android.intent.action.CALL_PRIVILEGED вызывается при выполнении вызова из телефонной книги следующим образом: Телефонная книга-> Контакт-> Длинный щелчок по номеру телефона -> Выбрать вызов из выпадающего меню. Следующий код должен быть в Манифесте:
<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>
Когда этот код добавляется в Manifest и вы пытаетесь выполнить вызов, как описано выше, вы можете получить Application Chooser и таким образом перехватить вызов и продолжить выполнение вызова выбранным приложением.
Что касается android.intent.action.NEW_OUTGOING_CALL, он используется в BroadcastReceivers, когда вы хотите получить уведомление об исходящем звонке. Например, если вы хотите, чтобы вы поместили следующий код в Manifest:
<receiver android:name=".CallReceiver">
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
и создать:
public class CallReceiver extends BroadcastReceiver{
private static final String TAG = "Call_Receiver";
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
//Notification there
....
}
}
Используя это, вы получите уведомление все время, когда исходящий звонок произошел.
Основное различие между этими пунктами, которые первый перехватывает намерение, а второй получает только результат, который что-то случилось.
Вы не можете использовать это намерение. Он имеет особый уровень защиты, который позволяет выбирать приложения только для его выдачи. Дополнительная информация здесь: http://code.google.com/p/android/issues/detail?id=10344 Это намерение и многие другие недоступны сторонним приложениям, но вы можете использовать их другими способами.
Например, вы можете поймать их. Но если вы не будете осторожны, это будет означать, что никакие вызовы не могут быть начаты с приложением Android Dialer по умолчанию, так как большинство из них используют это намерение. Если вы поймаете это, вы можете переслать его как простое намерение ACTION_CALL, которое будет работать.
В ответе Николая Никифорчука уже указано, но, возможно, явно не подчеркнуто, что разница в том, что если вы обрабатываете только CALL_PRIVILEGED, ваше приложение будет указано в качестве опции для начала вызова. Поэтому перед началом вызова платформа спросит пользователя, какое приложение следует использовать для выполнения операции.
Если вы обрабатываете только NEW_OUTGOING_CALL, фреймворк будет использовать стандартную звонилку, но набранный номер будет передан получателю вашего приложения, который сможет отменить вызов и обработать его, или изменить номер телефона, а затем передать его через другой зарегистрированный номер. получатель.