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 が配列で返されました。だから私はそれがそこにあるとかなり確信しており、何とかそれを使用することができます.