2015-02-22 2 views
1

Мне было интересно, может ли кто-нибудь пролить свет на вопрос о поле имени WifiP2pDevice.Android, называя устройство P2P

Как вы уже знаете, WifiP2pDevice имеет поле devicename, но не имеет методов «установить» devicename, только чтобы прочитать его.

Как обсуждалось в этом посте: How change the device name in WiFi direct p2p?

Это может быть возможным, чтобы установить имя устройства с помощью отражения. Я знаю, что это плохой обычай, но поскольку API не поддерживает это, и мне нужна эта функциональность в моем приложении, как бы я это сделал?

В настоящее время, мой код:

try 
    { 
     method = myManager.getClass().getMethod("setDeviceName", new Class[] { WifiP2pManager.Channel.class, String.class, 
       WifiP2pManager.ActionListener.class }); 
     method.invoke(myManager, myChannel, getIntent().getStringExtra(NETWORK_NAME)); 
     Toast.makeText(this, "Name set successful", Toast.LENGTH_SHORT).show(); 
    } 

В настоящее время приложение получает к этой точке и возвращает NoSuchMethodException, подразумевая, что setDeviceName не существует. Любая помощь/альтернативы отражения java?

EDIT 1: Согласно предложению, я изменил свой код, чтобы использовать WifiP2pManager вместо WifiP2pDevice для вызова getClass(), однако, программа вылетает из строки метода method.invoke, что метод setDeviceName ожидает 3 аргумента, но только получил 2 (хотя код режима, как он сейчас стоит, отправляет 3).

ответ

1

Судя по переменной наименовании из answer to the question you linked:

Method m = wpm.getClass().getMethod(
      "setDeviceName", 
      new Class[] { WifiP2pManager.Channel.class, String.class, 
        WifiP2pManager.ActionListener.class }); 

вы, вероятно, следует назвать этот метод (getClass().getMethod(...)) на объекте WifiP2pManager и не на объекте WifiP2pDevice (я думаю wpm стенды для W ИФИ P 2p M anager).

+0

Я тоже не мог выполнить эту работу, но я все еще настраиваю синтаксис, чтобы узнать, не сделал ли я прогресса в этом прозрении. – user1519665

Смежные вопросы