【发布时间】:2019-12-11 07:53:11
【问题描述】:
我想在我的应用关闭时检查互联网连接变化,例如 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"/>
【问题讨论】:
-
,您的问题现在解决了吗,如果您有解决方案,请在这里分享您的解决方案。
-
@CherryBu-MSFT - 我会发帖的..
标签: android xamarin xamarin.android