Search code examples
androidbroadcastreceiver

NEW_OUTGOING_CALL not being called on Samsung Galaxy S


Trying to intercept outgoing calls, and have a solution working well on

  • nexus 1 stock android 2.2
  • HTC desire 2.2
  • Moto defy 2.1

But not on the Samsung Galaxy S running 2.1, anyone seen this?

 <receiver  android:name="com.mypackge.OutGoingCallDetection" 
    android:exported="true"> 
 <intent-filter>   
  <action
    android:name="android.intent.action.NEW_OUTGOING_CALL"
    android:priority="0" /> 
</intent-filter> 
</receiver>
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> 

Update: the PROCESS_OUTGOING_CALLS is also added.

The receiver:

public class OutGoingCallDetection extends BroadcastReceiver {

    private static final String TAG = "OutGoingCallDetection";


    @Override
    public void onReceive(Context context, Intent intent) {

        String action = intent.getAction();
        Log.d(TAG, "onReceive, Action:" +intent.getAction());
    }
}

Solution

  • Try putting the manifest in order as suggested by Google Dev: Manifest.xml

    Like this:

    <uses-permission />
    ...
    <receiver>
        <intent-filter> . . . </intent-filter>
        <meta-data />
    </receiver>
    

    There may be an issue in how some devices parse the Manifest and may not register the receiver correctly.

    EDIT: As of ADT 16 Lint will tell you that your permissions are in the wrong place, so I'm assuming this must be more of an issue then previously thought

    Cheers