尝试使广播接收器检测何时更换网络或断开网络连接

时间:2018-04-17 01:47:50

标签: c# android xamarin.android broadcastreceiver receiver

所以我想创建一个Android应用程序来监控传入的数据。知道每个网络(Wifi,4g)消耗多少数据。我目前正在使用Xamarin.Android,而且我对Android很新。我在大学学习comp sci,并且在使用C#(虽然我一年没有真正编码)和SQL方面有一年的经验。

我已经弄清楚如何使用哪个网络,但我无法使用于检测网络更改的Broadcastreceiver()工作。我发现的唯一解决方案是Java,这使得它更难一点。我翻译了大多数java解决方案,这就是我所要做的:

no operator "+" matches these operands operand types are; const wchar_t[57] + const std::string

现在我的主要问题是如何使用它。这是我到目前为止所做的尝试:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.Net;

namespace ProjectData
{
    [BroadcastReceiver()]
    public class NetworkReceiver : BroadcastReceiver
    {
        public override void OnReceive(Context context, Intent intent)
        {
            ConnectivityManager connectivityManager = (ConnectivityManager) 
   context.GetSystemService(Context.ConnectivityService);
            NetworkInfo activeNetInfo =connectivityManager.ActiveNetworkInfo;


            if (activeNetInfo != null)
                Toast.MakeText(context, "Active Network Type : " + activeNetInfo.TypeName, ToastLength.Short).Show();


        }
    }
}

我还没有能够测试它,因为我收到了这个错误:

标签<接收器>属性名称包含无效字符' '

对于第10行:

public void Network()
        {
            NetworkReceiver networkReceiver = new NetworkReceiver();
            Intent intent = new Intent(this, networkReceiver.Class);

            RegisterReceiver(networkReceiver, new IntentFilter(ConnectivityManager.ConnectivityAction));
        }

这是整个清单:

<intent-filter><action android:name="android.net.conn.CONNECTIVITY_CHANGE" /></intent-filter></receiver>

我在Android 7.0上运行的手机上进行调试

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

尝试改变它

<receiver android:name=".NetworkReceiver"> android:exported=true

到:

<receiver android:name=".NetworkReceiver"
android:exported=true>

答案 1 :(得分:0)

你可以使用来自nugget的Xam.Plugin.Connectivity,效果很好