我正在尝试从CallManager包访问com.android.internal.telephony类对象。

这是我的代码:

ClassLoader classLoader = TestActivity.class.getClassLoader();
final ClassLoader classLoader = this.getClass().getClassLoader();
try {
    final Class<?> classCallManager =
        classLoader.loadClass("com.android.internal.telephony.CallManager");
    Log.i("TestActivity", classCallManager);
} catch (final ClassNotFoundException e) {
    Log.e("TestActivity", e);
}

不幸的是,这引发了ClassNotFoundException。相同的方法允许我访问PhoneFactory,但是显然不允许我访问CallManager

如果我可以上这个类,那么我想按以下步骤继续上课:
Method method_getInstance;
method_getInstance = classCallManager.getDeclaredMethod("getInstance");
method_getInstance.setAccessible(true);
Object callManagerInstance = method_getInstance.invoke(null);

谁可以帮我这个事?

提前致谢,
哈莎C

最佳答案

我可以成功加载CallManager及其方法。但是,当我调用getState(),getActiveFgCallState()时,即使应用程序从TelephonyManager接收到不同的调用状态(即TelephonyManager.CALL_STATE_IDLE,TelephonyManager.CALL_STATE_OFFHOOK,TelephonyManager.CALL_STATE_RINGING),它也会始终返回IDLE。

我使用以下代码加载该类及其方法:

final Class<?> classCallManager = classLoader.loadClass("com.android.internal.telephony.CallManager");
Log.i(TAG, "Class loaded " + classCallManager.toString());

Method methodGetInstance = classCallManager.getDeclaredMethod("getInstance");
Log.i(TAG, "Method loaded " + methodGetInstance.getName());

Object objectCallManager = methodGetInstance.invoke(null);
Log.i(TAG, "Object loaded " + objectCallManager.getClass().getName());


Method methodGetState = classCallManager.getDeclaredMethod("getState");
Log.i(TAG, "Method loaded " + methodGetState.getName());

Log.i(TAG, "Phone state = " + methodGetState.invoke(objectCallManager));

顺便说一句,我想做的是检测电话何时开始振铃。我在源代码中看到ALERTING是我应该听的内部事件。因此,我尝试使用CallManager来获取Call.State,而不是Phone.State。我也尝试使用CallManager类的registerForPreciseCallStateChanges(),但到目前为止,没有一种方法起作用。

10-08 19:28