BroadcastReceiver 用于 Internet 检查

BroadcastReceiver for Internet checking

我有用于检查互联网的广播接收器。每次设备未连接到互联网时,总是得到 2 个输出。我只想要一个输出。


广播接收器

public class Broadcast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    ConnectivityManager cm =
            (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
    if (!isConnected){
        Log.i("INTERNET","------------------------- not connect");
    }
}

}


这是输出

12659-12659 I/ViewRootImpl: CPU Rendering VSync enable = true
12659-12659 I/ViewRootImpl: CPU Rendering VSync enable = true
12659-12701 V/RenderScript: Application requested CPU execution
12659-12701 V/RenderScript: 0xb8116c40 Launching thread(s), CPUs 4
12659-12659 I/INTERNET: ------------------------- not connect
12659-12659 I/INTERNET: ------------------------- not connect

您可以在没有广播接收器的情况下检查网络可用性。

public class ConnectivityUtils {
private final Activity mActivity;

public ConnectivityUtils(Activity mActivity) {
    this.mActivity = mActivity;
}

public  boolean getConnectivityStatus() {
    ConnectivityManager cm = (ConnectivityManager) mActivity
            .getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    return null != activeNetwork;
}
}

加入AndroidManifest.xml

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

试试这个

创建一个 class

public class ConnectivityReceiver 扩展 BroadcastReceiver {

public static ConnectivityReceiverListener connectivityReceiverListener;

public ConnectivityReceiver() {
    super();
}

@Override
public void onReceive(Context context, Intent arg1) {
    ConnectivityManager cm = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    boolean isConnected = activeNetwork != null
            && activeNetwork.isConnectedOrConnecting();

    if (connectivityReceiverListener != null) {
        connectivityReceiverListener.onNetworkConnectionChanged(isConnected);
    }
}

public static boolean isConnected() {
    ConnectivityManager
            cm = (ConnectivityManager) MyApplication.getInstance().getApplicationContext()
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    return activeNetwork != null
            && activeNetwork.isConnectedOrConnecting();
}


public interface ConnectivityReceiverListener {
    void onNetworkConnectionChanged(boolean isConnected);
}

}

互相创造class

public class MyApplication extends Application {

private static MyApplication mInstance;



@Override
public void onCreate() {
    super.onCreate();
    mInstance = this;
}

public static synchronized MyApplication getInstance() {
    return mInstance;
}

public void setConnectivityListener(ConnectivityReceiver.ConnectivityReceiverListener listener) {
    ConnectivityReceiver.connectivityReceiverListener = listener;
}

}

在 maenfiest 文件中添加权限

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

**和这个**

**

并且不要忘记在清单中添加这个

 <receiver
        android:name="com.ncrypted.redfox.Utils.ConnectivityReceiver"
        android:enabled="true">
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        </intent-filter>
    </receiver>

现在打电话给你想上网的地方

在您的 activity

中实现它
 ConnectivityReceiver.ConnectivityReceiverListener

 @Override
public void onNetworkConnectionChanged(boolean isConnected) {
    showSnack(isConnected);
}
 private void showSnack(boolean isConnected) {
    if (isConnected) {
        getUserStatus();
    } else {
        Toast.makeText(this, getString(R.string.str_internet_err), Toast.LENGTH_SHORT).show();
    }
}

for more information please follow this link