Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

No ringing event on incoming calls

I don't know where is a problem. Listener doesn't catch onRinging event (so I can decide will I accept or reject incoming calls). in manifest is this:

<uses-permission android:name="android.permission.USE_SIP" />

in main activity onCreate is this:

IntentFilter filter = new IntentFilter();
filter.addAction("android.SipDemo.INCOMING_CALL");
callReceiver = new IncomingCallReceiver();
this.registerReceiver(callReceiver, filter);
...
SipManager manager = SipManager.newInstance(this);
Intent i = new Intent();
i.setAction("android.SipDemo.INCOMING_CALL");
PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, Intent.FILL_IN_DATA);
manager.open(me, pi, null);

in BroadcastReceiver class is this:

public void onReceive(Context context, Intent intent) {
SipAudioCall incomingCall = null;
try {
SipAudioCall.Listener listener = new SipAudioCall.Listener() {
...
@Override
public void onCallEnded(SipAudioCall call) {
// TODO Auto-generated method stub
super.onCallEnded(call);
}
@Override
public void onRinging(SipAudioCall call, SipProfile caller) {
try {
call.answerCall(30);
call.startAudio();
call.setSpeakerMode(true);
if(call.isMuted()) {
call.toggleMute();
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
WalkieTalkieActivity wtActivity = (WalkieTalkieActivity) context;
incomingCall = wtActivity.manager.takeAudioCall(intent, listener);
wtActivity.call = incomingCall;
...

I recieve CallEnd event and onChanged (after I end call) but I dont recieve onRinging event. what could be a problem? Thnx

EDIT : I changed it all. I put new intent filter to receiver like this (bold):

<receiver android:name=".IncomingCallReceiver" android:label="Call Receiver">
    **<intent-filter>  
        <action android:name="android.intent.action.PHONE_STATE" />  
    </intent-filter>**  
</receiver>

and I changed BroadcastReceiver inherit class like this (bold one):

@Override
public void onReceive(Context context, Intent intent) {
    try {
        **PhoneStateListener phoneListener=new PhoneStateListener() {
        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
        // TODO Auto-generated method stub
        Log.d("DEBUG", "Phone listener....");
        String stateString = "N/A";
        switch (state) {
        case TelephonyManager.CALL_STATE_IDLE:
        stateString = "Idle";
        break;
        case TelephonyManager.CALL_STATE_OFFHOOK:
        stateString = "Off Hook";
        break;
        case TelephonyManager.CALL_STATE_RINGING:
        stateString = "Ringing";
        break;
    }
}
};**
WalkieTalkieActivity wtActivity = (WalkieTalkieActivity) context;
SipSession ses=wtActivity.manager.getSessionFor(intent);
**TelephonyManager telephony = (TelephonyManager) Context.getSystemService(Context.TELEPHONY_SERVICE);  
telephony.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE);**
...

Now I get only IDLE state but still there is no ringing.

like image 776
user1182625 Avatar asked Feb 06 '12 11:02

user1182625


People also ask

Why does my phone not notify me of incoming calls?

If you are not receiving any notifications, it is possible you have turned off visual notifications. Go Settings > Sound > Do Not Disturb, and check what Notifications is set to. Check that Phone app notifications haven't been disabled. Touch & hold , then touch > Notifications and make sure they are on.


2 Answers

There is an error in the source code of SipAudioCall class.

To work around this issue:

incomingCall = wtActivity.manager.takeAudioCall(intent, null);
incomingCall.setListener(listener, true);
like image 190
Mad Potato Avatar answered Oct 04 '22 09:10

Mad Potato


I have implemented same scenario to accept or reject incoming call in sip demo. Create your own Activity (IncomingGui.java) with two buttons Accept and Reject. In BroadcastReciever class call your Activity(IncomingGui.java) on incoming call event.

        WalkieTalkieActivity wtActivity = (WalkieTalkieActivity) context;
        incomingCall = wtActivity.manager.takeAudioCall(intent, listener);
        showIncomingCallGui(intent, context); 
        wtActivity.call = incomingCall;

Then define following methods in BroadcastReciever class

    public void showIncomingCallGui(Intent intent,Context context) {

       Intent incomingCall=new Intent(context,IncomingCallGui.class);
       context.startActivity(incomingCall);
    }

public static void answerIncomingCall(){

    try {
            incomingCall.answerCall(30);
            incomingCall.startAudio();
            incomingCall.setSpeakerMode(true);

                if (incomingCall.isMuted()) {
                incomingCall.toggleMute();

            }
    }

    catch(Exception e){

        System.out.println(e.toString());
    }

}

public static void rejectIncomingCall(){

    try {
            if (incomingCall !=null) {

                incomingCall.endCall();
                incomingCall.close();
            }

    }
            catch(Exception e){

        System.out.println(e.toString());
    }

Then in IncomingGui.java define following methods behind "Accept" and "Reject" Buttons. Now on incoming call you will have your own incoming call activity to accept or reject call.

    public void onCallAcceptButton(View view){
    IncomingCallReceiver.answerIncomingCall();
}

    public void onCallRejectButton(View view){
    IncomingCallReceiver.rejectIncomingCall();
    this.finish();

}
like image 28
Zain Avatar answered Oct 04 '22 10:10

Zain