Широковещательный приемник android.net.conn.CONNECTIVITY_CHANGE не срабатывает в JellyBean для подключения и отключения VPN

Это манифестная часть

  <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.

Пожалуйста, помогите


person Shravan    schedule 05.05.2015    source источник
comment
в основном я хочу знать, если VPN отключен или подключен   -  person Shravan    schedule 16.05.2015
comment
Если у вас есть какие-либо сомнения, вы можете спросить меня. Я готов помочь вам.   -  person Durai Amuthan.H    schedule 03.08.2015
comment
Шраван, у тебя есть решение по этому поводу? Я получаю ту же проблему.   -  person Kaifi Girdhar    schedule 15.02.2016


Ответы (2)


До сих пор в моих выводах

в леденец

Широковещательная рассылка android.net.conn.CONNECTIVITY_CHANGE запускается только при подключении или отключении VPN.

Таким образом, вы можете использовать следующий фрагмент кода вместе с логикой, которая у вас есть для устройств pre-lollipop.

@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"));
   }

}

Надеюсь это поможет.

person Durai Amuthan.H    schedule 21.07.2015

Вы можете попробовать это на своем 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.

person icaneatclouds    schedule 06.05.2015