2012-05-15 2 views
2

Je regarde la démo WifiDirect pour Android et je voulais savoir s'il était possible d'obtenir quelque chose comme le RSSI ou la force du signal entre deux appareils connectés. Désolé si la question n'a aucun sens, je sais que l'on peut obtenir RSSI à partir des points d'accès, mais ce que je veux savoir, c'est si ce concept de RSSI existe dans les connexions P2P parmi les périphériques dans Wifi Direct.Puissance du signal en connexion p2p avec Wifi Direct?

Nous vous remercions de votre temps.

Répondre

8

Remarque: Cette réponse était vrai pour le niveau de l'API 14, je ne sais pas si elle applique toujours les dernières versions d'Android.

Un fichier non documenté nommé WifiP2pPeer existe dans la source de code Android. Il contient des lignes "intéressantes".

Nous pouvons voir qu'une valeur RSSI est codée en dur (mRssi = 60; //TODO: fix), donc la fonctionnalité peut ne pas encore être implémentée ... (Comme d'autres dans Android 14 concernant WifiP2p).

public class WifiP2pPeer extends Preference { 

    private static final int[] STATE_SECURED = {R.attr.state_encrypted}; 
    public WifiP2pDevice device; 

    private int mRssi; 
    private ImageView mSignal; 

    private static final int SIGNAL_LEVELS = 4; 

    public WifiP2pPeer(Context context, WifiP2pDevice dev) { 
     super(context); 
     device = dev; 
     setWidgetLayoutResource(R.layout.preference_widget_wifi_signal); 
     mRssi = 60; //TODO: fix 
    } 

    @Override 
    protected void onBindView(View view) { 
     if (TextUtils.isEmpty(device.deviceName)) { 
      setTitle(device.deviceAddress); 
     } else { 
      setTitle(device.deviceName); 
     } 
     mSignal = (ImageView) view.findViewById(R.id.signal); 
     if (mRssi == Integer.MAX_VALUE) { 
      mSignal.setImageDrawable(null); 
     } else { 
      mSignal.setImageResource(R.drawable.wifi_signal); 
      mSignal.setImageState(STATE_SECURED, true); 
     } 
     refresh(); 
     super.onBindView(view); 
    } 

    @Override 
    public int compareTo(Preference preference) { 
     if (!(preference instanceof WifiP2pPeer)) { 
      return 1; 
     } 
     WifiP2pPeer other = (WifiP2pPeer) preference; 

     // devices go in the order of the status 
     if (device.status != other.device.status) { 
      return device.status < other.device.status ? -1 : 1; 
     } 

     // Sort by name/address 
     if (device.deviceName != null) { 
      return device.deviceName.compareToIgnoreCase(other.device.deviceName); 
     } 

     return device.deviceAddress.compareToIgnoreCase(other.device.deviceAddress); 
    } 

    int getLevel() { 
     if (mRssi == Integer.MAX_VALUE) { 
      return -1; 
     } 
     return WifiManager.calculateSignalLevel(mRssi, SIGNAL_LEVELS); 
    } 

    private void refresh() { 
     if (mSignal == null) { 
      return; 
     } 
     Context context = getContext(); 
     mSignal.setImageLevel(getLevel()); 
     String[] statusArray = context.getResources().getStringArray(R.array.wifi_p2p_status); 
     setSummary(statusArray[device.status]); 
    } 
} 
+0

Merci Fabien, c'est utile à coup sûr. Pourrais-je parcourir ce fichier en ligne quelque part? Ou dois-je télécharger le repo de 4.0 pour le voir? – unbekant

+0

Cela devrait aider: [http://stackoverflow.com/questions/449763/where-can-i-browse-android-source-code-on-line](http://stackoverflow.com/questions/449763/where -can-i-browse-android-code-source-en-ligne). Mais je préfère le télécharger ... –

+0

Super, je vais le télécharger depuis le gestionnaire SDK et y jeter un coup d'oeil. Découverte très utile Fabien merci encore! – unbekant

Questions connexes