Android WIFI或3G网络更改时广播接收器

Android WIFI或3G网络更改时广播接收器,android,broadcastreceiver,android-4.2-jelly-bean,android-4.3-jelly-bean,Android,Broadcastreceiver,Android 4.2 Jelly Bean,Android 4.3 Jelly Bean,我开发了一个android应用程序,每当WiFi或3G网络发生变化时,它都会更新服务器数据库。我已经实现了一个BroadcastReceiver,它可以监听WiFi更改或3G连接更改 问题是这段代码在Android版本4.x.x中不起作用。Internet已连接即使在启用网络或wifi后,toast也不会出现 它在安卓2.3.x和3.x.x中运行良好,互联网已连接,数据库也已更新 这是MainActivity.java文件: 我不知道我错在哪里 谢谢大家! 您只需检查连接,如下所述: @Over

我开发了一个android应用程序,每当WiFi或3G网络发生变化时,它都会更新服务器数据库。我已经实现了一个BroadcastReceiver,它可以监听WiFi更改或3G连接更改


问题是这段代码在Android版本4.x.x中不起作用。Internet已连接即使在启用网络或wifi后,toast也不会出现

它在安卓2.3.x和3.x.x中运行良好,互联网已连接,数据库也已更新

这是MainActivity.java文件:

我不知道我错在哪里


谢谢大家!

您只需检查连接,如下所述:

@Override
public void onReceive(Context context, Intent intent) {
    Log.d("Network Monitoring", "onReceive ");

     if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {


            boolean noConnectivity = intent.getBooleanExtra(
                    ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);

            if (noConnectivity) {
                return;//you don't have internet connectivity
            }
            //you have internet connectivity, so you may put your code here for further process

        }


}

请指定不工作的含义Internet已连接toast即使在启用网络或wifi后也不会出现。请不要创建名为MainActivity的类,除非它实际扩展了Activity类。此外,除非您有一个实际的主/启动器活动,否则您的用户无法启动您的应用程序,并且在您的AndroidManifest.xml中注册的任何BroadcastReceiver都将永远不会被激活。我想Toast需要活动的上下文。您正在传递一个不同的上下文实例。我完全同意@Squonk-请不要让MainActivity扩展BroadcastReceiver。@MimiPaul:您的应用程序只能在android V3.1以下正常工作,因为自蜂巢版本以来,android强制定义至少一个活动,将应用程序从停止状态推送到活动状态。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.read"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="19" />

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

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

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

    </application>

</manifest>
@Override
public void onReceive(Context context, Intent intent) {
    Log.d("Network Monitoring", "onReceive ");

     if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {


            boolean noConnectivity = intent.getBooleanExtra(
                    ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);

            if (noConnectivity) {
                return;//you don't have internet connectivity
            }
            //you have internet connectivity, so you may put your code here for further process

        }


}