Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#Xamarin API 28中使用带有回调的ConnectivityManager.ConnectivityAction使用PendingContent而不是Intent?_C#_Xamarin_Callback_Android Pendingintent - Fatal编程技术网

如何在C#Xamarin API 28中使用带有回调的ConnectivityManager.ConnectivityAction使用PendingContent而不是Intent?

如何在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

我需要在Xamarin中进行一次简单的回调,以检查网络状态是已连接还是已断开

到目前为止,我一直在使用以下代码:

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);