diff --git a/app/src/main/java/com/tianrun/sipcall/SipEngine.java b/app/src/main/java/com/tianrun/sipcall/SipEngine.java index 1dfdb81..fa41607 100644 --- a/app/src/main/java/com/tianrun/sipcall/SipEngine.java +++ b/app/src/main/java/com/tianrun/sipcall/SipEngine.java @@ -336,14 +336,18 @@ public class SipEngine implements BluetelInterface { * * @throws Exception */ - public void PlaydefaultCallMediaPlayer(Context context) { + public Ringtone PlaydefaultCallMediaPlayer(Context context) { Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE); Ringtone r = RingtoneManager.getRingtone(context, notification); r.play(); + return r; } - public void StopdefaultCallMediaPlayer(Context context) { - Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE); - Ringtone r = RingtoneManager.getRingtone(context, notification); - r.stop(); + public void StopdefaultCallMediaPlayer(Ringtone r) { +// Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE); +// Ringtone r = RingtoneManager.getRingtone(context, notification); +// r.stop(); + if(r != null) { + r.stop(); + } } } diff --git a/app/src/main/java/com/tianrun/sipcall/call/InCallActivity.java b/app/src/main/java/com/tianrun/sipcall/call/InCallActivity.java index 4a9f095..e1c8f6f 100644 --- a/app/src/main/java/com/tianrun/sipcall/call/InCallActivity.java +++ b/app/src/main/java/com/tianrun/sipcall/call/InCallActivity.java @@ -6,6 +6,7 @@ import android.app.Activity; import android.app.KeyguardManager; import android.content.Context; import android.content.Intent; +import android.media.Ringtone; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -50,6 +51,7 @@ public class InCallActivity extends TrBaseActivity implements OnClickListener { private SMPercentFrameLayout localRenderLayout; private SMPercentFrameLayout remoteRenderLayout; private ImageButton incall_answer, incall_hangup; + private Ringtone ringtone; private TextView show; QMUITabSegment mTabSegment; ViewPager mContentViewPager; @@ -191,15 +193,22 @@ public class InCallActivity extends TrBaseActivity implements OnClickListener { } show.setText(callnumber + callstate); if (incall_answer.getVisibility() == View.VISIBLE && selfCall) { - incall_answer.setVisibility(View.GONE); - SipEngine.getInstance().answer(callid); - SipEngine.getInstance().StopdefaultCallMediaPlayer(this); + answer(); } else { - SipEngine.getInstance().PlaydefaultCallMediaPlayer(this); + ringtone = SipEngine.getInstance().PlaydefaultCallMediaPlayer(this); + AutoAnwser(); //5秒后自动接听 } - } + static void AutoAnwser(){ + handler_CallActivity.postDelayed(doAutoAnwser, 5000); + } + static Runnable doAutoAnwser = new Runnable() { + @Override + public void run() { + CONS.SENDMESSAGETO(handler_CallActivity, -2, null); + } + }; @Override protected void onPause() { super.onPause(); @@ -211,11 +220,14 @@ public class InCallActivity extends TrBaseActivity implements OnClickListener { stopVideoStream(true); super.onDestroy(); SipEngine.getInstance().hangup(callid); + handler_CallActivity.removeCallbacks(doAutoAnwser); handler_CallActivity = null; if (wakeLock != null) { wakeLock.release(); wakeLock = null; } + SipEngine.getInstance().StopdefaultCallMediaPlayer(ringtone); + ringtone = null; } /** @@ -275,6 +287,9 @@ public class InCallActivity extends TrBaseActivity implements OnClickListener { stopVideoStream(true); finish(); break; + case -2: + answer(); + break; } return true; } @@ -332,15 +347,20 @@ public class InCallActivity extends TrBaseActivity implements OnClickListener { if (SipEngine.callPagesConfig.size() == 0) { finish(); } + SipEngine.getInstance().StopdefaultCallMediaPlayer(ringtone); break; case R.id.incall_answer: - incall_answer.setVisibility(View.GONE); - SipEngine.getInstance().answer(callid); - SipEngine.getInstance().StopdefaultCallMediaPlayer(this); + answer(); break; } } + public void answer(){ + incall_answer.setVisibility(View.GONE); + SipEngine.getInstance().answer(callid); + SipEngine.getInstance().StopdefaultCallMediaPlayer(ringtone); + handler_CallActivity.removeCallbacks(doAutoAnwser); + } public void ShowVideoView(boolean show) { if (show) { diff --git a/app/src/main/java/com/tianrun/sipcall/call/InCallMeetingActivity.java b/app/src/main/java/com/tianrun/sipcall/call/InCallMeetingActivity.java index a46038e..0650164 100644 --- a/app/src/main/java/com/tianrun/sipcall/call/InCallMeetingActivity.java +++ b/app/src/main/java/com/tianrun/sipcall/call/InCallMeetingActivity.java @@ -7,6 +7,7 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Color; +import android.media.Ringtone; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -87,6 +88,7 @@ public class InCallMeetingActivity extends TrBaseActivity implements OnClickList public static Intent incallIntent; private boolean isinited = false; + private Ringtone ringtone; TrAdapter adapterUser; @@ -526,15 +528,23 @@ public class InCallMeetingActivity extends TrBaseActivity implements OnClickList show.setText(callnumber + callstate); //控件显示号码,来电,去电,通话中... if (incall_answer.getVisibility() == View.VISIBLE && selfCall) { - incall_answer.setVisibility(View.GONE); - SipEngine.getInstance().StopdefaultCallMediaPlayer(this); - SipEngine.getInstance().answer(callid); + answer(); } else { - SipEngine.getInstance().PlaydefaultCallMediaPlayer(this); + ringtone = SipEngine.getInstance().PlaydefaultCallMediaPlayer(this); + AutoAnwser(); //5秒后自动接听 } - } + static void AutoAnwser(){ + handler_CallActivity.postDelayed(doAutoAnwser, 5000); + } + static Runnable doAutoAnwser = new Runnable() { + @Override + public void run() { + CONS.SENDMESSAGETO(handler_CallActivity, -2, null); + } + }; + @Override protected void onPause() { super.onPause(); @@ -547,12 +557,15 @@ public class InCallMeetingActivity extends TrBaseActivity implements OnClickList super.onDestroy(); SipEngine.getInstance().hangup(callid); handler_CallActivity.removeCallbacks(getMemberRunner); + handler_CallActivity.removeCallbacks(doAutoAnwser); handler_CallActivity = null; if (wakeLock != null) { wakeLock.release(); wakeLock = null; } + SipEngine.getInstance().StopdefaultCallMediaPlayer(ringtone); + ringtone = null; } /** @@ -621,6 +634,9 @@ public class InCallMeetingActivity extends TrBaseActivity implements OnClickList case -1: getMembers(); break; + case -2: + answer(); + break; } return true; } @@ -683,14 +699,10 @@ public class InCallMeetingActivity extends TrBaseActivity implements OnClickList if (SipEngine.callPagesConfig.size() == 0) { finish(); } + SipEngine.getInstance().StopdefaultCallMediaPlayer(ringtone); break; case R.id.incall_answer: - incall_answer.setVisibility(View.GONE); - if (DBUser.mySelf != null && DBUser.mySelf.isManager) { - incall_mute.setVisibility(View.VISIBLE); - } - SipEngine.getInstance().answer(callid); - SipEngine.getInstance().StopdefaultCallMediaPlayer(this); + answer(); break; case R.id.incall_mute: muteAll(v); @@ -701,6 +713,16 @@ public class InCallMeetingActivity extends TrBaseActivity implements OnClickList } } + public void answer() { + incall_answer.setVisibility(View.GONE); + if (DBUser.mySelf != null && DBUser.mySelf.isManager) { + incall_mute.setVisibility(View.VISIBLE); + } + SipEngine.getInstance().answer(callid); + SipEngine.getInstance().StopdefaultCallMediaPlayer(ringtone); + handler_CallActivity.removeCallbacks(doAutoAnwser); + } + public void muteAll(View view) { QMUIQuickAction qa = QMUIPopups.quickAction(InCallMeetingActivity.this, QMUIDisplayHelper.dp2px(InCallMeetingActivity.this, 56),