using System;
|
using Android.App;
|
using Android.Content;
|
using Android.Net;
|
using Android.Telephony;
|
|
namespace Shared
|
{
|
public class MyBroadcastReceive : BroadcastReceiver
|
{
|
/// <summary>
|
/// 响铃事件
|
/// </summary>
|
public static Action ActioRinging;
|
/// <summary>
|
/// 电话挂断事件
|
/// </summary>
|
public static Action ActionIdle;
|
/// <summary>
|
/// 是否在通话中
|
/// </summary>
|
public static bool IsCalling;
|
public override void OnReceive (Context context, Intent intent)
|
{
|
//return;
|
System.Console.WriteLine ($"接收到广播事:{intent.Action}");
|
switch (intent.Action) {
|
// 如果是拨打电话
|
case "android.intent.action.NEW_OUTGOING_CALL": {
|
System.Console.WriteLine ($"播打电话->{intent.GetStringExtra (Intent.ExtraPhoneNumber)}");
|
}
|
break;
|
//被打电话
|
case "android.intent.action.PHONE_STATE": {
|
// 如果是来电
|
var tManager = (TelephonyManager)context.GetSystemService (Service.TelephonyService);
|
System.Console.WriteLine ($"通话状态->{tManager.CallState}");
|
switch (tManager.CallState) {
|
//响铃
|
case CallState.Ringing:
|
IsCalling = true;
|
var mIncomingNumber = intent.GetStringExtra ("incoming_number");
|
ActioRinging?.Invoke ();
|
break;
|
//接通
|
case CallState.Offhook:
|
IsCalling = true;
|
ActioRinging?.Invoke ();
|
break;
|
//挂断电话
|
case CallState.Idle:
|
IsCalling = false;
|
ActionIdle?.Invoke ();
|
break;
|
}
|
break;
|
}
|
case "android.net.conn.CONNECTIVITY_CHANGE":
|
if (intent.Extras != null) {
|
var ni = (NetworkInfo)intent.Extras.Get (ConnectivityManager.ExtraNetworkInfo);
|
if (ni != null && ni.GetState () == NetworkInfo.State.Connected) {
|
//可以再这里进行一些网络突然断开未完成的操作
|
System.Console.WriteLine ($"网络变化:{ni.GetState ()}");
|
var type = getConnectedType (context);
|
if (type == 2)
|
{
|
Application.IsWifi = true;
|
}
|
else {
|
Application.IsWifi = false;
|
}
|
BaseActivity.NetworkStateChanged?.Invoke (type);
|
}
|
}
|
break;
|
}
|
}
|
|
int getConnectedType (Context context)
|
{
|
if (context != null) {
|
var mConnectivityManager = (ConnectivityManager)context.GetSystemService (Context.ConnectivityService);
|
if (mConnectivityManager == null) {
|
return 0;
|
}
|
var mNetworkInfo = mConnectivityManager.ActiveNetworkInfo;
|
if (mNetworkInfo != null && mNetworkInfo.IsAvailable) {
|
switch (mNetworkInfo.Type) {
|
case ConnectivityType.Mobile:
|
return 1;
|
case ConnectivityType.Wifi:
|
return 2;
|
}
|
}
|
}
|
return 0;
|
}
|
|
}
|
}
|