2017-09-02 33 views
5

Uygulamamda, aygıt WIFI ağından her bağlandığında veya bağlantıyı keserken bildirim almam gerekiyor. Bunun için bir BroadcastReceiver kullanmam gerekiyor ama buradaki farklı makalelerden ve soruları okuduktan sonra, bunun için kullanacağım Broadcast eyleminin biraz karıştığını görüyorum. Bence ben üç seçenek vardır:WIFI değişimi için yayın eylemi

Gerçekten sadece cihaz kablosuz ağa CONNECTED olduğunda bildirim almak istediğiniz kaynakları azaltmak için (ve bir IP adresi aldı) veya cihazdan bir tane DISCONNECTED. CONNECTING vb. Gibi diğer durumları umursamıyorum.

Peki bunun için kullanacağım en iyi yayın eylemi nedir? Ve olayları manully filtrelemem gerekiyor (CONNECTED ve DISCONNECTED'dan daha fazla aldığım için onReceive)?

DÜZENLEME: SUPPLICANT_CONNECTION_CHANGE_ACTION benim için en iyi seçim olacağını düşünüyorum aşağıdaki I yorumunda işaret ama ateş ya da benim uygulama tarafından almadım gibi. Others, bu yayında aynı soruna sahiptir, ancak bunun için gerçek bir çözüm önerilmemektedir (aslında başka yayınlar kullanılmaktadır). Bunun için bir fikrin var mı?

+0

belirsizlik nedir? SUPPLICANT_CONNECTION_CHANGE_ACTION için Android dokümantasyonunda açıkça "İstemci ile bir bağlantı kurulduğunu belirten Yayın eylemi eylemi (ve şimdi Wi-Fi işlemlerini gerçekleştirmek mümkündür) veya istek sahibine bağlantı kayboldu. Bir ekstra bağlantı durumunu sağlar. true, CONNECTED anlamına gelen bir boole. " Amaçların geri kalanı, Wifi Durumunu veya değiştirilen ağ bilgilerini taşıyan tam NetworkInfo nesnesini anlatabilecek ekstra özelliklere sahiptir. Gereksinimlerinize göre kullanım (1) oldukça bekleniyor. –

+0

Haklısınız ama sorun şu ki, 'SUPPLICANT_CONNECTION_CHANGE_ACTION' hiçbir zaman başvurum tarafından alınmadı ve diğer sorularda okuduğum gibi bu yaygın bir sorundur. Bütün telefonlar bu yayını anlatabildiğim kadar ateş etmiyor. – Cilenco

+0

Ardından, sizin için çalışıyorlarsa, diğer iki yayını da kullanmalısınız. –

cevap

1

Bunu kullanıyorum ve benim için çalışıyor

@Override 
protected void onResume() { 
    super.onResume(); 
    IntentFilter filter = new IntentFilter(); 
    filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); 
    filter.addAction("android.net.wifi.STATE_CHANGE"); 
    registerReceiver(networkChangeReceiver, filter); 
} 

@Override 
protected void onDestroy() { 
    unregisterReceiver(networkChangeReceiver); 
    super.onDestroy(); 
} 

ve

BroadcastReceiver networkChangeReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     if (!AppUtils.hasNetworkConnection(context)) { 
      showSnackBarToast(getNetworkErrorMessage()); 
     } 

    } 
}; 

deneyin. Umarım size yardımcı olur.

+0

Teşekkürler ama bunu nasıl yapacağımı biliyorum. Asıl soru, eğer bu 'IntentFilter' (içinde kullanılan eylem) sadece bağlanmak ve olayları kesmek için en iyi çözümdür. – Cilenco

1

Hiç sizin için uygundur, hangi Manifest veya Fragment veya Aktivite ya, WifiManager.NETWORK_STATE_CHANGED_ACTION Eylem ile WifiManager.NETWORK_STATE_CHANGED_ACTION works.

Kayıt alıcısı için gidebilirsiniz.

geçersiz kılma alıcısı:

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

    final String action = intent.getAction(); 

    if(action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)){ 
     NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); 
     boolean connected = info.isConnected(); 
     if (connected) 
     //call your method 
    }  
}