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.
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.
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);
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();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With