Android 应用程序关闭时在后台检查internet连接
我想在我的应用程序关闭时检查互联网连接的变化,如Wifi、数据、以太网 到目前为止,我所写的代码还不起作用 主要活动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
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)