Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.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
Android 应用程序关闭时在后台检查internet连接_Android_Xamarin_Xamarin.android - Fatal编程技术网

Android 应用程序关闭时在后台检查internet连接

Android 应用程序关闭时在后台检查internet连接,android,xamarin,xamarin.android,Android,Xamarin,Xamarin.android,我想在我的应用程序关闭时检查互联网连接的变化,如Wifi、数据、以太网 到目前为止,我所写的代码还不起作用 主要活动 public class MainActivity : AppCompatActivity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resourc

我想在我的应用程序关闭时检查互联网连接的变化,如Wifi、数据、以太网

到目前为止,我所写的代码还不起作用

主要活动

public class MainActivity : AppCompatActivity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.activity_main);
    }

    protected override void OnResume()
    {
        base.OnResume();
        var networkReceiver = new NetworkStateReceiver();
        IntentFilter intentFilter = new IntentFilter(ConnectivityManager.ConnectivityAction);
        RegisterReceiver(networkReceiver, intentFilter);
    }

    protected override void OnPause()
    {
        try
        {
            base.OnPause();
            var networkReceiver = new NetworkStateReceiver();
            UnregisterReceiver(networkReceiver);
        }
        catch (System.Exception)
        {
        }
    }
}
NetworkStateReceiver.cs

public class NetworkStateReceiver : BroadcastReceiver
{
    public override void OnReceive(Context context, Intent intent)
    {
        ComponentName comp = new ComponentName(context.PackageName, Java.Lang.Class.FromType(typeof(YourService)).Name);
        intent.PutExtra("isNetworkConnected", isConnected(context));
        context.StartService((intent.SetComponent(comp)));

    }

    public bool isConnected(Context context)
    {
        ConnectivityManager connectivityManager = ((ConnectivityManager)context.GetSystemService(Context.ConnectivityService));
        NetworkInfo networkInfo = connectivityManager.ActiveNetworkInfo;
        return networkInfo != null && networkInfo.IsAvailable && networkInfo.IsConnected;
    }
}
服务等级

public class YourService : IntentService
{
    protected override void OnHandleIntent(Intent intent)
    {
        Bundle extras = intent.Extras;
        var isNetworkConnected = extras.GetBoolean("isNetworkConnected");
        if (isNetworkConnected)
        {
            StartChrome("https://www.google.com/");
        }
        else
        {
            StartChrome("https://www.microsoft.com/");
        }
    }

    public void StartChrome(string url)
    {
        try
        {
            Intent i = new Intent("android.intent.action.MAIN");
            i.SetComponent(ComponentName.UnflattenFromString("com.android.chrome/com.android.chrome.Main"));
            i.AddCategory("android.intent.category.LAUNCHER");
            i.SetData(Uri.Parse(url));
            Application.Context.StartActivity(i);
        }
        catch (ActivityNotFoundException e)
        {
            // Chrome is probably not installed
        }
    }
}
显示

 <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="27" />

  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
  <uses-permission android:name="android.permission.INTERNET" />

  <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme">
  </application>

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

  <service
           android:name=".YourService"
           android:exported="true"
           android:permission="android.permission.BIND_JOB_SERVICE"/>

我正在使用这个

    fun isOnline(context:Context): Boolean {
        return try {
            val connectivityManager = context.getSystemService(
                    Context.CONNECTIVITY_SERVICE) as ConnectivityManager
            connectivityManager.activeNetworkInfo != null &&
                    connectivityManager.activeNetworkInfo.isConnected
        } catch (exception: Exception) {
            false
        }
    }

或用于侦听连接更新:

注册接收人:

val receiver = object : BroadcastReceiver() {
            override fun onReceive(context: Context, intent: Intent) {
                handelConnectionCallback()
            }

为什么要写这个?请参阅更新的答案,这是连接检查的功能是的,它应该在后台或前台服务中工作,只要它们没有被杀死让我检查一下。这是java还是kotlin?这是kotlin:),您现在已经解决了您的问题,如果您有解决方案,请在此处共享您的解决方案。@CherryBu MSFT-当然,我会发布。。
 val intentFilter = IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)
        context.registerReceiver(receiver, intentFilter)