我想在通话过程中检查拨号盘是否被激活。我正在为简单的应用程序提出一个想法,它需要在呼叫会话期间知道拨号盘的状态。
任何代码段或指向tuts的链接都会有所帮助。
先谢谢你。
注意:很抱歉,因为我没有发布代码段,因为我处于初始阶段并且遇到了这个过程,因此我没有要显示的代码。
答案 0 :(得分:1)
您可以通过使用Java反射获取内部com.android.internal.telephony.ITelephony
对象来执行此操作。并使用showCallScreen();
或showCallScreenWithDialpad
/**
* If there is currently a call in progress, show the call screen.
* The DTMF dialpad may or may not be visible initially, depending on
* whether it was up when the user last exited the InCallScreen.
*
* @return true if the call screen was shown.
*/
boolean showCallScreen();
/**
* Variation of showCallScreen() that also specifies whether the
* DTMF dialpad should be initially visible when the InCallScreen
* comes up.
*
* @param showDialpad if true, make the dialpad visible initially,
* otherwise hide the dialpad initially.
* @return true if the call screen was shown.
*
* @see showCallScreen
*/
boolean showCallScreenWithDialpad(boolean showDialpad);
创建包名com.android.internal.telephony.ITelephony并使用上述方法放置ITelephony.aidl
个文件。编译时,将在gen
目录下使用相同的包名创建相同的方法。然后你就可以使用这种方法。
TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
Class c = Class.forName(tm.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
ITelephony telephonyService;
telephonyService = (ITelephony)m.invoke(tm);
// Silence the ringer and answer the call!
telephonyService.showCalScreen();
但可能这不适用于Android 2.2+以上,我没试过,但你可以试试它是否有效。在Android 2.2+上,它有时会提供安全性异常。以下是该链接。
Neither user 10056 nor current process has android.permission.MODIFY_PHONE_STATE