android.net.conn.CONNECTIVITY_CHANGE广播接收器不会在JellyBean中触发VPN连接和断开连接

时间:2015-05-05 20:17:47

标签: android android-intent broadcastreceiver vpn android-broadcast

这是明显的部分

  <receiver
            android:name="my.com.app.ConnectivityModifiedReceiver"
            android:label="NetworkConnection" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>

这是java代码

public class my.com.app.ConnectivityModifiedReceiver extends BroadcastReceiver {


    @Override
    public void onReceive(Context context, Intent intent) {

        context.sendBroadcast(new Intent("ConnectivityModified"));

    }

}

ConnectivityModifiedReceiver 将根据网络连接更改发送意图。在我的情况下 VPN连接和断开连接

我在Lollipop得到意图但不在JellyBean。

Plz帮助

2 个答案:

答案 0 :(得分:2)

如果有帮助,你可以试试onReceive:

 @Override
    public void onReceive(Context context, Intent intent) {
        final ConnectivityManager connMgr = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = connMgr.getActiveNetworkInfo();
        // should check null because in air plan mode it will be null
        if (netInfo != null && netInfo.isConnected()) {
            System.out.println("INTERNET IS AVAILABLE");
        } else {
            System.out.println("INTERNET UNAVAILABLE");
        }
    }

您可以将逻辑放在if语句中。

答案 1 :(得分:2)

到目前为止我的发现

在棒棒糖中

android.net.conn.CONNECTIVITY_CHANGE 广播仅在连接或断开任何VPN时触发。

因此,您可以使用以下代码段以及前棒棒糖设备的逻辑。

@Override
public void onReceive(Context context, Intent intent) {

   Bundle bundle = intent.getExtras();

   String KeyNI="networkInfo";

   android.net.NetworkInfo bundleNetworkInfo=(android.net.NetworkInfo)bundle.get(KeyNI);


   if(!bundleNetworkInfo.getTypeName().toString().equalsIgnoreCase("VPN"))
   {
      context.sendBroadcast(new Intent("ConnectivityModified"));
   }

}

希望这有帮助。