Сведения об устройстве Android WiFi Direct

Я хотел бы знать, как я могу изменить сведения об устройстве интерфейса WiFi Direct устройства Android (например, имя интерфейса). Я разрабатываю приложение, которое использует технологию Bluetooth или WiFi Direct для беспроводной связи, и оно подключается только к устройствам, названным с определенным префиксом, чтобы различать те устройства, на которых работает мое приложение, относительно тех, у которых есть только интерфейс (я знаю, что это наивное решение... :)). Bluetooth позволяет манипулировать именем интерфейса с помощью методов setName(String name) и getName(), предоставляемых классом BluetoothAdapter, но я считаю, что для WiFi Direct не существует соответствующих. Если это невозможно, как я могу отличить те устройства WiFi Direct, на которых запущено мое приложение, от тех, у которых включен только интерфейс? Любая помощь приветствуется. Спасибо.


person user1399641    schedule 16.05.2012    source источник
comment
Возможно, вам следует взглянуть на этот уже отвеченный вопрос: [Получить имя интерфейса WIFI на Android] [1] [1]: stackoverflow.com/questions/5980826/   -  person Rémi F    schedule 18.05.2012
comment
Благодарю за ваш ответ! В этом вопросе они говорят о решении получить имя интерфейса Wifi на Android, тогда как я ищу решение, чтобы установить имя интерфейса Wifi Direct на Android!   -  person user1399641    schedule 18.05.2012
comment
Возможно, вы захотите использовать обнаружение служб, подобное этому developer.android.com/ обучение/подключение устройств без проводов/   -  person vjsailappan    schedule 24.10.2012


Ответы (1)


Прямое имя Wi-Fi — это имя устройства, вы можете изменить его следующим образом:

public void changeWiFiDirectName(final String newName){
Method m = null;
try {
    m = mManager.getClass().getMethod("setDeviceName", new Class[]{mChannel.getClass(), String.class, WifiP2pManager.ActionListener.class});
} catch (NoSuchMethodException e) {
    e.printStackTrace();
}
try {
    if (m != null) {
        m.invoke(mManager, mChannel,newName, new WifiP2pManager.ActionListener() {

            @Override
            public void onSuccess() {
                Log.d(TAG, "Name changed to "+newName);
            }
            @Override
            public void onFailure(int reason) {
                Log.d(TAG, "The name was not changed");
            }
        });
    }
} catch (IllegalAccessException e) {
    e.printStackTrace();
} catch (InvocationTargetException e) {
    e.printStackTrace();
}
person MM Manuel    schedule 27.04.2016