如何在C#Xamarin API 28中使用带有回调的ConnectivityManager.ConnectivityAction使用PendingContent而不是Intent?
我需要在Xamarin中进行一次简单的回调,以检查网络状态是已连接还是已断开 到目前为止,我一直在使用以下代码:如何在C#Xamarin API 28中使用带有回调的ConnectivityManager.ConnectivityAction使用PendingContent而不是Intent?,c#,xamarin,callback,android-pendingintent,C#,Xamarin,Callback,Android Pendingintent,我需要在Xamarin中进行一次简单的回调,以检查网络状态是已连接还是已断开 到目前为止,我一直在使用以下代码: class NetworkControl : INetworkControl { private readonly INetworkControl.ICallback _callback; private readonly Context _context; private readonly NetworkBroadcastReceiver _receiver
class NetworkControl : INetworkControl
{
private readonly INetworkControl.ICallback _callback;
private readonly Context _context;
private readonly NetworkBroadcastReceiver _receiver = new NetworkBroadcastReceiver();
public NetworkControl(INetworkControl.ICallback callback, Context context)
{
_callback = callback;
_context = context;
IntentFilter filter = new IntentFilter(ConnectivityManager.ConnectivityAction);
context.RegisterReceiver(_receiver, filter);
}
public INetworkControl.ICallback Callback => _callback;
public INetworkControl.NetworkStatus Status
{
get
{
var current = Connectivity.NetworkAccess;
if (current == NetworkAccess.Internet)
{
return INetworkControl.NetworkStatus.Connected;
}
return INetworkControl.NetworkStatus.Disconnected;
}
}
}
class NetworkBroadcastReceiver : BroadcastReceiver
{
private static String TAG = "NetworkBroadcastReceiver";
public override void OnReceive(Context context, Intent intent)
{
if (ShellBridge.Instance != null)
{
if (intent.Action.Equals(ConnectivityManager.ConnectivityAction))
{
NetworkInfo ni = (NetworkInfo)intent.Extras.Get(ConnectivityManager.ExtraNetworkInfo);
if (ni.isConnected)
{
// do something if connected
ShellBridge.Instance.NetworkBridge.Callback.NetworkStatusChanged(INetworkControl.NetworkStatus.Connected);
} else
{
ShellBridge.Instance.NetworkBridge.Callback.NetworkStatusChanged(INetworkControl.NetworkStatus.Connected);
}
}
}
}
问题是,意图创建中的函数ConnectivityManager.ConnectivityAction已被删除,很快就会过时。搜索后,我发现Pending帐篷应该用于此目的,但我找不到任何有效的示例来说明如何使用它
最接近我需要的是:
https://stackoverflow.com/questions/58588132/how-to-use-registernetworkcallback-with-pendingintent
但是,它没有我需要的所有信息。
我需要它是所有编程,而不改变清单,因为,我的应用程序应该是一个前置和后台应用程序
请帮忙,谢谢你的时间。你不需要重新发明轮子。您可以通过Xamarin Essentials'实现所有这些 除了检查是否存在这样的连接外:
var current=Connectivity.NetworkAccess;
如果(当前==NetworkAccess.Internet)
{
//可以连接到internet
}
您还可以跟踪连接类型更改的时间:
公共类连接测试
{
公共连接测试()
{
//注册连接更改,请确保完成后取消订阅
连接性.ConnectivityChanged+=连接性_ConnectivityChanged;
}
无效连接\u ConnectivityChanged(对象发送方,ConnectivityChangedEventArgs e)
{
var access=网络访问;
变量配置文件=例如连接配置文件;
}
}
您可以查看
用法
您只需实例化ConnectionStateMonitor类并启用它,就可以使用OnAvailable
和OnLost
方法检测网络状态
ConnectionStateMonitor m = new ConnectionStateMonitor ();
m.enable(context);
提及
你为什么不使用Xamarin Essentials?我需要能够自动检测网络变化,这就是我使用回调的原因,使用Essentials,你只需检查是否存在internet。我也找到了这个解决方案,但我需要它使用回调,bc这是回调在不同时间监控的许多事情之一,我需要这个来与PendinContent一起工作(对我来说,我也想这样学习:)),无论如何,请投赞成票谢谢你的时间,我也找到了这个,但正如我说的Mihail,我想知道一种使用PaddingContent的方法,经过大量搜索,我没有找到任何关于如何使用paddingent的例子,并且已经决定使用这个解决方案,但是你能帮我一点忙吗,我不明白为了实现你的代码,我应该如何更改我的代码?因此,我应该在NetworkControl构造函数中实例化这个类(我在其中注册了接收方(并去掉接收方ofc)),是的,当Wi-Fi连接到网络时会调用onAvailable(),当Wi-Fi断开与网络的连接时会调用onLost()。好的,非常感谢您抽出时间,我会接受答案,如果您有机会找到包含peddingIntent的答案,请标记我:)
ConnectionStateMonitor m = new ConnectionStateMonitor ();
m.enable(context);