Я не уверен, что у меня проблемы с самим Reflection или с методом, который я пытаюсь получить.
Я бы хотел вызвать функцию setLine1Number из класса:
com.android.internal.telephony.gsm.GSMPhone
Чтобы мой номер был правильно вставлен в мой телефон, поскольку он не обязательно должен быть на моей SIM-карте.Поэтому я хочу иметь возможность вызывать функцию getLine1Number и возвращать тот же номер, который я установил.
Отражение представляется единственным способом использования этой функции, поскольку ее нет в общедоступном API.
Я написал это, но продолжаю получать исключение недопустимого аргумента.Вот мой код:
String className = "com.android.internal.telephony.gsm.GSMPhone";
Class classToInvestigate = Class.forName(className);
Object arglist[] = new Object[3];
arglist[0] = new String("Phone Number");
arglist[1] = new String ("16035552412"); // Not a real phone number
arglist[2] = null;
Class[] paramTypes = new Class[3];
paramTypes[0] = String.class;
paramTypes[1] = String.class;
paramTypes[2] = Message.class;
Method setLine1Number = classToInvestigate.getMethod("setLine1Number", paramTypes);
setLine1Number.setAccessible(true);
Object TestReturn = setLine1Number.invoke(classToInvestigate, arglist); // Problem is here. Not sure how to properly do this.
Теперь я хотел бы позвонить
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String PhoneNumber2 = telephonyManager.getLine1Number();
и получить возвращенный номер, который я ввел.Но, как я сказал, исключение незаконного аргумента, и я не уверен, как именно это решить.Любая помощь приветствуется.Я все еще новичок в размышлениях, так что это может быть простой проблемой.
Вот журнал ошибок:
Что-то еще, что я забыл упомянуть, это то, что я использовал следующий код, чтобы проверить, что этот методдействительно существует в файле класса:
Method[] checkMethod = classToInvestigate.getDeclaredMethods();
Test = new String[checkMethod.length];
int i = 0;
for(Method m : checkMethod)
{
// Found a method m
Test[i] = m.getName();
i++;
}
И метод setLine1Number был возвращен в массиве.Так что я уверен, что он есть, и я могу как-то его использовать.