在呼叫会话期间检查拨号盘上的状态

时间:2013-12-27 12:45:38

标签: android android-fragments phone-call

我想在通话过程中检查拨号盘是否被激活。我正在为简单的应用程序提出一个想法,它需要在呼叫会话期间知道拨号盘的状态。

任何代码段或指向tuts的链接都会有所帮助。

先谢谢你。

注意:很抱歉,因为我没有发布代码段,因为我处于初始阶段并且遇到了这个过程,因此我没有要显示的代码。

1 个答案:

答案 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