Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
507 views
in Technique[技术] by (71.8m points)

how to use android.intent.action.CALL_PRIVILEGED and android.intent.action.NEW_OUTGOING_CALL?

I can't find the documentation for:

android.intent.action.CALL_PRIVILEGED

I saw it is used for example in csipsimple to handle the call.

I would like to better understand how to use it. For example: what's the relationship between android.intent.action.CALL_PRIVILEGED and android.intent.action.NEW_OUTGOING_CALL?

I added:

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

in the AndroidManifest for my project. When a call is start from the native dialer, my activity is called but if in the onResume I do getIntent().getAction() the result is null

EDIT

I made it working handling the onNewIntent as well as onCreate. The onResume receives an intent without an action (sent by the default onNewIntent handler I suppose).

The problem is that to check whether the action is CALL_PRIVILEGED I had to hard-code the string "android.intent.action.CALL_PRIVILEGED" because the action CALL_PRIVILEGED is hidden.

I tried to register the activity for ACTION_CALL only and it did not work

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Intent with action android.intent.action.CALL_PRIVILEGED is called when you making a call from phonebook using following way: Phone Book->Contact->Long Click on the phonenumber -> Choose make call from dropdown menu. Following code should be place in Manifest:

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

For HTC some changes there:

<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>

When this code is added to Manifest and you try to make call as described above you can get Application Chooser and this way to intercept the call and continue making call by the choosen application.

As for android.intent.action.NEW_OUTGOING_CALL it used in BroadcastReceivers, when you want to get notification about outgoing call. For example if you want to to that you should put following cod to Manifest:

<receiver android:name=".CallReceiver"> 
  <intent-filter> 
    <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> 
  </intent-filter> 
</receiver>

and create:

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
        ....
        }
}

Using this will you get notification all times when outgoing call happend.

The main difference beеween this items that first intercept intent and second only get a result that something happend.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...