有没有办法在Android 2.3后结束通话?

时间:2012-06-06 02:23:12

标签: android telephony

我正在尝试开发类似于AutoAnswer的东西,但是当通知广播接收器时它也会自动挂起。我花了一整天时间阅读关于这个问题的其他stackoverflow问题,似乎权限MODIFY_PHONE_STATE仅限于System Apps,但有些帖子说使用endCall();不需要此权限。

我的问题分为两部分

  1. endCall()仍可使用吗?自Android 2.3以来,它曾经在任何地方使用过吗?
  2. 如果是的话,我需要帮助使其正常工作,因为现在它无法正常工作。我从http://code.google.com/p/autoanswer/source/browse/trunk/src/com/#com/android/internal/telephony下载ITelephony.aidl 并将其放入包装中。我是新用户,因此无法发布图片。
  3. 这就是我的文件树在netbeans中的样子:
    enter image description here

    这是我的广播接收器中运行的代码。它之前已被多次发布作为此问题的解决方案但我仍然无法使其工作:/

        ITelephony telephonyService;
        TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);  
        try {
            Class c = Class.forName(telephony.getClass().getName());
            Method m = c.getDeclaredMethod("getITelephony");
            m.setAccessible(true);
            telephonyService = (ITelephony) m.invoke(telephony);
            telephonyService.endCall();
        } 
        catch (Exception e) {
                //TODO: some exception handling
        }
    

    查看日志,我看到了这个错误:

    [PhoneIntfMgr] CMD_END_CALL: no call to hang up 
    
    编辑:我是Android开发的新手,似乎无法找到Android应用程序的控制台输出 - 比如调用e.printStackTrace(),但我确实让Toast在catch块中显示一些文本这个:

    catch (Exception e) {
           Toast toast = Toast.makeText(context, "IN CATCH BLOCK ", Toast.LENGTH_LONG);
           toast.show();
            e.printStackTrace();
        }
    

    但屏幕上没有任何内容......

1 个答案:

答案 0 :(得分:0)

您可以使用此代码:

telephonyManager.listen(new PhoneStateListener() {

            @Override
            public void onCallStateChanged(int state, String incomingNumber) {
                switch (state) {
                case TelephonyManager.CALL_STATE_IDLE:
                    /* your code */
                    break;
                case TelephonyManager.CALL_STATE_OFFHOOK:
                    Toast.makeText(context.getApplicationContext(), "OFFHOOK",
                            Toast.LENGTH_SHORT).show();
                    setResultData(null);
                    break;
                case TelephonyManager.CALL_STATE_RINGING:
                    /* your code */
                    break;
                }
                // super.onCallStateChanged(state, incomingNumber);
            }

        }, PhoneStateListener.LISTEN_CALL_STATE);

当您要进行OFFHOOK状态时,您可以看到显示“OFFHOOK”的祝酒词,然后setResultData(null);结束通话。