2012-02-24 16 views
10

Değiştiğinde wifi durumunu almak için bir Wifi BroadcastReceiver kaydettirmeyi denedim. Ama şimdiye kadar yayın alma şansım yok.BroadcastAlternatif bildiride yayınlanmadı Yayın Yayını Almıyor

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <receiver android:name=".WifiReceiver" > 
     <intent-filter> 
      <action android:name="android.net.wifi.WifiManager.WIFI_STATE_CHANGED_ACTION" /> 
      <action android:name="android.intent.action.PHONE_STATE" /> 
     </intent-filter> 
    </receiver> 

    //activity declaration here... 

</application> 

BraodcastReceiver'ı manifest dosyasına nasıl kaydedeceğinizi biliyor musunuz?

benim uygulama çalıştıran olup olmadığını wifi durumunda değişiklik olduğunda wifi izlemek istedikleri için faaliyetlerde içinde kaydettikten istemiyoruz. Gerçekten biraz yardım almak için umut

public class WifiReceiver extends BroadcastReceiver { 
    private final String TAG = "WifiReceiver"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN); 
     String wifiStateText = "No State"; 

     switch (wifiState) { 
     case WifiManager.WIFI_STATE_DISABLING: 
      wifiStateText = "WIFI_STATE_DISABLING"; 
      break; 
     case WifiManager.WIFI_STATE_DISABLED: 
      wifiStateText = "WIFI_STATE_DISABLED"; 
      break; 
     case WifiManager.WIFI_STATE_ENABLING: 
      wifiStateText = "WIFI_STATE_ENABLING"; 
      break; 
     case WifiManager.WIFI_STATE_ENABLED: 
      wifiStateText = "WIFI_STATE_ENABLED"; 
      break; 
     case WifiManager.WIFI_STATE_UNKNOWN: 
      wifiStateText = "WIFI_STATE_UNKNOWN"; 
      break; 
     default: 
      break; 
     } 
     MyLog.d(TAG, "onReceive Broadcast > WiFiState: " + wifiStateText); 
     MyLog.d(TAG, "onReceive Broadcast > Time: " + new Date()); 
    } 
} 

:

Bu benim BroadcastReceiver sınıftır. Şimdiden teşekkürler.

+0

Bak – Ajay

+0

Eğer android izin tanımladınız mı bu blog http://marakana.com/forums/android/examples/40.html internet bağlantısı ile ilgili tüm yayın alıcısı .permission.ACCESS_WIFI_STATE ve android.permission.CHANGE_WIFI_STATE – Ajay

+0

@Ajay, Bahsettiğiniz Blog’a zaten baktım. Sorun şu ki, bahsettiğim gibi, alıcıyı faaliyetlerdeki notuna not etmek istiyorum. Bildirimde zaten izni aldım. Neyse, sağolun için teşekkürler Ajay. – Zul

cevap

25
tezahür Your alıcı olmalıdır Ayrıca Aşağıdaki izin gerekebilir bu

<receiver android:name=".WifiReceiver" > 
    <intent-filter> 
     <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> 
    </intent-filter> 
</receiver> 

benziyor

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

Wow..thanks @ dong221.Bu gerçekten yaptı. Bana sormama neden olmazsa, eylem adının 'android.net.wifi.WIFI_STATE_CHANGED' olması gerektiğini nasıl bildin? Bana bununla ilgili herhangi bir bağlantı verebilir misin? – Zul

+1

@Zul Burada sabit bir değer olarak listelenmektedir: http://developer.android.com/reference/android/net/wifi/WifiManager.html#WIFI_STATE_CHANGED_ACTION –

0

Sadece yayın Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT bayrağıyla gönderildiği için, uygulamanızın, yalnızca sistem hizmetlerini oluşturabilen, Android önyüklemeden önce bu alıcıyı kaydettirmesi gerektiği anlamına gelir.

0

Sana bu yolu gibi alıcıyı kayıt yaptıran düşünüyorum:

<receiver 
    android:name=".WiFiReciever"> 
    <intent-filter> 
     <action 
      android:name="class name with package" /> 
     <data 
      android:scheme="myscheme" /> 
    </intent-filter> 
</receiver> 
+0

'', seni takip etmiyorum. Bunun üzerine bir örnek var mı? – Zul

3
<receiver android:name=".WifiReceiver" > 
    <intent-filter android:priority="100" > 
      <action 
      android:name="android.net.wifi.WIFI_STATE_CHANGED" 
      android:enabled="true" /> 
    </intent-filter> 
</receiver> 

t girin o yüksek öncelikli ve doğru olarak da etkin bayrağı

+0

Wow..thanks @ user1203673. Bu gerçekten yaptı. Bana sormama neden olmazsa, eylem adının 'android.net.wifi.WIFI_STATE_CHANGED' olması gerektiğini nasıl bildin? Bana bununla ilgili herhangi bir bağlantı verebilir misin? Üzgünüm oy veremem, itibarım yeterli değil. – Zul

+0

özniteliği "etkin", sözdizimi hatası veriyor. – usman

+0

Bunu deneyin: ' ' –

0

benim için çalıştı iyi:

Bildirim:

<receiver android:name="com.AEDesign.communication.WifiReceiver"> 
    <intent-filter android:priority="100"> 
     <action android:name="android.net.wifi.STATE_CHANGE" /> 
    </intent-filter> 
</receiver> 

WifiReceiver Class:

public class WifiReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); 
     if(info != null) { 
      if(info.isConnected()) { 
       //Do your work. 
       //To check the Network Name or other info: 
       WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
       WifiInfo wifiInfo = wifiManager.getConnectionInfo(); 
       String ssid = wifiInfo.getSSID();  
      } 
     } 
    } 
} 

İzinler:

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

Bu

<action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />     
<action android:name="android.net.wifi.STATE_CHANGE" />