如何访问com.android.internal.telephony.CallManager?

Har*_*sha 7 java android telephony

我试图CallManagercom.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);
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这是扔了一个ClassNotFoundException.同样的方法允许我访问PhoneFactory,但显然我不允许访问CallManager.

如果我能够上课,那么我想继续使用该课程,如下所示:

Method method_getInstance;
method_getInstance = classCallManager.getDeclaredMethod("getInstance");
method_getInstance.setAccessible(true);
Object callManagerInstance = method_getInstance.invoke(null);
Run Code Online (Sandbox Code Playgroud)

谁可以帮我这个事?

在此先感谢,
Harsha C.

tua*_*uan 8

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

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

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));
Run Code Online (Sandbox Code Playgroud)

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

  • 我试图访问精确的呼叫状态几天没有任何进展.我已经发现`CallManager`本身在没有注册`Phone`实例的情况下不提供任何调用信息,即它从外部接收有关呼叫状态变化的通知.您正在从应用程序进程访问`CallManager`类,因此您在所有字段中都使用默认值获取它的空实例,而处理该调用的包含`Phone`实例的`CallManager`的实际实例位于另一个进程中,可能在某些系统服务中,如电话服务. (2认同)

Tan*_*dal -2

您是否READ_PHONE_STATE在 AndroidManifest.xml 中添加了?

我想你很想念那个人。