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
Shravan намираш ли някакво решение по въпроса? Получавам същия проблем.   -  person Kaifi Girdhar    schedule 15.02.2016


Отговори (2)


Досега според моите констатации

В Lollipop

Излъчването на 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"));
   }

}

Надявам се това да помогне.

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