private void handleIncomingCallIntent(Intent intent) { if (intent != null && intent.Action != null && intent.Action == VoiceActivity.ACTION_INCOMING_CALL) { IncomingCallMessage incomingCallMessage = intent.getParcelableExtra(INCOMING_CALL_MESSAGE); VoiceClient.handleIncomingCallMessage(ApplicationContext, incomingCallMessage, incomingCallMessageListener_Renamed); } }
/* * Send the IncomingCallMessage to the VoiceActivity */ private void sendIncomingCallMessageToActivity(IncomingCallMessage incomingCallMessage, int notificationId) { Intent intent = new Intent(VoiceActivity.ACTION_INCOMING_CALL); intent.putExtra(VoiceActivity.INCOMING_CALL_MESSAGE, incomingCallMessage); intent.putExtra(VoiceActivity.INCOMING_CALL_NOTIFICATION_ID, notificationId); LocalBroadcastManager.getInstance(this).sendBroadcast(intent); }
public override void onMessageReceived(string from, Bundle bundle) { Log.d(TAG, "onMessageReceived " + from); if (IncomingCallMessage.isValidMessage(bundle)) { /* * Generate a unique notification id using the system time */ int notificationId = (int)DateTimeHelperClass.CurrentUnixTimeMillis(); /* * Create an IncomingCallMessage from the bundle */ IncomingCallMessage incomingCallMessage = new IncomingCallMessage(bundle); showNotification(incomingCallMessage, notificationId); sendIncomingCallMessageToActivity(incomingCallMessage, notificationId); } }
private void SetIncomingCall(string strPhoneNo) { if (txtTelephone.InvokeRequired) { IncomingCallMessage myInvoke = new IncomingCallMessage(SetIncomingCall); this.Invoke(myInvoke, new object[] { strPhoneNo }); } else { int callType = 1; //程序 FormIncomingCall form = new FormIncomingCall(strPhoneNo, string.Empty, callType); form.ShowDialog(); if (!string.IsNullOrEmpty(form.IncomingPhoneNo)) { txtTelephone.Text = form.IncomingPhoneNo; } if (!string.IsNullOrEmpty(form.SelectedAddress)) { txtAddress.Text = form.SelectedAddress; } if (form.CurCustomerInfo != null) { txtTelephone.Text = form.CurCustomerInfo.Telephone; txtName.Text = form.CurCustomerInfo.CustomerName; } } }
/* * Show the notification in the Android notification drawer */ //JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @TargetApi(android.os.Build.VERSION_CODES.KITKAT_WATCH) private void showNotification(com.twilio.voice.IncomingCallMessage incomingCallMessage, int notificationId) private void showNotification(IncomingCallMessage incomingCallMessage, int notificationId) { string callSid = incomingCallMessage.CallSid; if (!incomingCallMessage.Cancelled) { /* * Create a PendingIntent to specify the action when the notification is * selected in the notification drawer */ Intent intent = new Intent(this, typeof(VoiceActivity)); intent.Action = VoiceActivity.ACTION_INCOMING_CALL; intent.putExtra(VoiceActivity.INCOMING_CALL_MESSAGE, incomingCallMessage); intent.putExtra(VoiceActivity.INCOMING_CALL_NOTIFICATION_ID, notificationId); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); /* * Pass the notification id and call sid to use as an identifier to cancel the * notification later */ Bundle extras = new Bundle(); extras.putInt(NOTIFICATION_ID_KEY, notificationId); extras.putString(CALL_SID_KEY, callSid); /* * Create the notification shown in the notification drawer */ NotificationCompat.Builder notificationBuilder = (new NotificationCompat.Builder(this)).setSmallIcon(R.drawable.ic_call_white_24px).setContentTitle(getString([email protected]_name)).setContentTextuniquetempvar.setAutoCancel(true).setExtras(extras).setContentIntent(pendingIntent).setColor(Color.rgb(214, 10, 37)); notificationManager.notify(notificationId, notificationBuilder.build()); } else { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { /* * If the incoming call was cancelled then remove the notification by matching * it with the call sid from the list of notifications in the notification drawer. */ StatusBarNotification[] activeNotifications = notificationManager.ActiveNotifications; foreach (StatusBarNotification statusBarNotification in activeNotifications) { Notification notification = statusBarNotification.Notification; Bundle extras = notification.extras; string notificationCallSid = extras.getString(CALL_SID_KEY); if (callSid.Equals(notificationCallSid)) { notificationManager.cancel(extras.getInt(NOTIFICATION_ID_KEY)); } } } else { /* * Prior to Android M the notification manager did not provide a list of * active notifications so we lazily clear all the notifications when * receiving a cancelled call. * * In order to properly cancel a notification using * NotificationManager.cancel(notificationId) we should store the call sid & * notification id of any incoming calls using shared preferences or some other form * of persistent storage. */ notificationManager.cancelAll(); } } }