icoming CALL で DTMF コードを送信しようとしています。このために、Java リフレクションを使用してみます。
public void initialize(){
ClassLoader classLoader = Dtmf.class.getClassLoader();
final Class<?> classCallManager = classLoader.loadClass("com.android.internal.telephony.CallManager");
Method methodGetInstance = classCallManager.getDeclaredMethod("getInstance");
objectCallManager = methodGetInstance.invoke(null);
methodGetState = classCallManager.getDeclaredMethod(SEND_DTMF, char.class);
}
public boolean sendDtmf(char ch) {
boolean result = false;
if ( methodGetState != null) {
try {
Object res = methodGetState.invoke(objectCallManager,
new Object[]{Character.valueOf(ch)});
if (res instanceof Boolean) {
result = ((Boolean) res).booleanValue();
}
} catch (IllegalArgumentException e) {
} catch (IllegalAccessException e) {
} catch (InvocationTargetException e) {
}
}
return result;
}
クラス CallManager のソース コードへのリンク : Call Manager のソース コード しかし、メソッド sendDtmf() で常に「false」になります。デバッグでは、コードは次に進みます:
Object res = methodGetState.invoke(objectCallManager,
new Object[]{Character.valueOf(ch)});
どうしたの?