2016-06-21 102 views
0

我正在开发一个基于谷歌的WiFi p2p API的应用程序,我想获得我使用的设备(不是同级)的名称,但唯一的方法我发现检索名称是在我的情况下,通过使用这样的改变:如何获得我的设备的设备名称使用WiFi p2p

if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) { 
      // this device details has changed(name, connected, etc) 
      mApp.mThisDevice = (WifiP2pDevice) intent.getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_DEVICE); 

      mApp.mDeviceName = mApp.mThisDevice.deviceName; 
      PTPLog.d(TAG, "processIntent: WIFI_P2P_THIS_DEVICE_CHANGED_ACTION " + mApp.mThisDevice.deviceName); 
      if(mApp.mHomeActivity != null){ 
       mApp.mHomeActivity.updateThisDevice(mApp.mThisDevice); 
      } 
     } 

但我不希望这样(要等到发生变化),我想从beggining知道我自己的名字,以便在我刚打开应用时显示它。这可能吗?

+0

你试过android.os.Build.MODEL吗? –

+0

存储在字符串中,您将获得您的设备名称 –

+0

WifiP2pDevice设备=(WifiP2pDevice)intent.getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_DEVICE); 你可以使用这个。 –

回答

0

如果启用了Wi-Fi,并且您注册了P2P并加载了所有内容,那么当该意图触发时,设备名称应立即可用。如果Wi-Fi被禁用,那么如果您想从WifiP2pManager获取设备名称,则必须等待其启用。这是我知道如何获得这个名字的唯一方法。

+0

对不起,“注册P2P”到底意味着什么?我这样做: 'WifiManager wifiManager =(WifiManager)getSystemService(WIFI_SERVICE); wifiManager.setWifiEnabled(true); //如果服务尚未启动,请启动它。 Intent serviceIntent = new Intent(this,ConnectionService.class); startService(serviceIntent); //开始连接服务' 然后我处理意图。 – BlueMountain

+0

是的,这就是我注册P2P的意思。如果您运行Android的WiFiDirectServiceDiscovery演示,则在启用Wi-Fi时,DEVICE_CHANGED意图在加载时立即触发。您可以在那里记录device.deviceName以查看名称。设备名称不必为了意图启动而更改,因此您无需等待更改。 https://github.com/android/platform_development/tree/master/samples/WiFiDirectServiceDiscovery https://groups.google.com/forum/#!topic/wi-fi-direct/uWpuOzHY6y0 – Brendan

+0

我还有一个问题然后,使用您最后评论中的代码。如果我想从一台设备向另一台设备传输一些消息(比如说我创建的分区中的消息),反之亦然(同时),我该如何避免碰撞?我试图做到这一点,但只有一种方式。 – BlueMountain

0

我看到的唯一方法是使用反射来更改设备名称,然后使用代码获取原始设备名称,之后您可以将设备名称重新设置为原始设备名称。