Намерение с действием 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
....
}
}
Используя это, вы будете получать уведомления все время, когда исходящий звонок происходит.
Основное различие между этими пунктами, которые первыми перехватывают намерение, а вторые только получают результат, который что-то случилось.