2012-05-15 2 views
2

Android 용 WifiDirect 데모를 살펴보고 연결된 두 장치간에 신호 강도 또는 신호 강도를 얻을 수 있는지 여부를 알고 싶습니다.Wifi Direct로 P2P 연결의 신호 강도가?

죄송합니다. 질문에 의미가 없으면 액세스 포인트에서 RSSI를 가져올 수 있지만이 알고있는 RSSI 개념이 Wifi Direct의 P2P 연결에 있는지 알고 싶습니다.

감사합니다.

답변

8

: 여전히 최신 안드로이드 버전에 적용되는 경우이 대답은 API 레벨 14에 대한 사실, 나도 몰라.

WifiP2pPeer라는 문서화되지 않은 파일이 Android 코드 소스에 존재합니다. 그것은 "흥미로운"몇 줄을 포함하고 있습니다.

RSSI 값이 하드 코드 됨 (mRssi = 60; //TODO: fix)이므로이 기능은 아직 구현되지 않을 수 있습니다 ... (WifiP2p와 관련하여 안드로이드 14에서와 마찬가지로).

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

파비엥에게 감사드립니다. 이것은 유용합니다. 이 파일을 어딘가에서 온라인으로 탐색 할 수 있습니까? 아니면 4.0 버전의 레포를 다운로드해야합니까? – unbekant

+0

도움이됩니다. [http://stackoverflow.com/questions/449763/where-can-i-browse-android-source-code-on-line](http://stackoverflow.com/questions/449763/where) -can-i-browse-android-source-code-on-line)을 사용할 수 있습니다. 그러나 나는 그것을 다운로드하는 것을 선호합니다 ... –

+0

위대한, 내가 SDK를 관리자에서 다운로드하고 그것을 한 번 봐 줄게. 매우 유용한 발견 Fabien 다시 감사드립니다! – unbekant

관련 문제