android callmanager.java,java – 如何访问com.android.internal.telephony.CallManager?

开发者在尝试通过CallManager获取电话状态时遇到问题,常得到IDLE,寻求解决铃声监听及状态更新的方法。文章详细探讨了类加载、方法调用和期望的ALERTING事件的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我可以成功加载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));

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值