Странные ошибки отраженияAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Странные ошибки отражения

Сообщение Anonymous »

Я уже несколько недель пытаюсь найти обходные пути/решить эту проблему и, похоже, больше не могу ее обойти. У меня есть приложение для Android, которому необходимо изменить имя устройства перед созданием одноранговой сети.

Поскольку этот метод скрыт в Android SDK, я использую отражение. Метод, который я пытаюсь отразить, находится здесь, в строке 1305: https://android.googlesource.com/platfo ... /wifi/p2p/ WifiP2pManager.java

Вот мой код, пытающийся выполнить отражение:

Код: Выделить всё

public class HostStagingActivity extends Activity
{
WifiP2pManager.Channel myChannel; //This channel is created and passed to system services in order for WIFI_P2P to work
WifiP2pManager myManager; //This manager is declared to get the required channel object
...

Код: Выделить всё

@Override
protected void onCreate(Bundle savedInstanceState)
{
myManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);//passed to the myReceiver listener class
myChannel = myManager.initialize(this, getMainLooper(), null);//passed to the myReceiver listener class
...
Method method1 = null;
try
{
method1 = myManager.getClass().getMethod("setDeviceName",  new Class[] {WifiP2pManager.Channel.class, String.class, WifiP2pManager.ActionListener.class });
method1.invoke(myChannel, NETWORK_NAME, new WifiP2pManager.ActionListener()
{
public void onSuccess()
{
Toast.makeText(getApplicationContext(), "DeviceName Changed Successfully!", Toast.LENGTH_SHORT).show();
//Code for Success in changing name
}
public void onFailure(int reason)
{
Toast.makeText(getApplicationContext(), "DeviceName Change Returned Failure!", Toast.LENGTH_SHORT).show();
//Code to be done while name change Fails
}
});
}
Однако это приводит к ошибке выполнения:

Код: Выделить всё

Caused by: java.lang.IllegalArgumentException: expected receiver of type android.net.wifi.p2p.WifiP2pManager, but got android.net.wifi.p2p.WifiP2pManager$Channel
at java.lang.reflect.Method.invokeNative(Native Method)
Почему метод ожидает объект WifiP2pManager, хотя я явно передаю ему класс WifiP2pManager.Channel в своем коде? Просто ради интереса: когда я передаю ему ожидаемые аргументы, он утверждает, что метод ожидал три аргумента, а я дал ему только два.

Может ли мне помочь кто-нибудь, у кого больше опыта размышлений?

Подробнее здесь: https://stackoverflow.com/questions/289 ... ion-errors
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»