在Android post 2.3中,有没有办法结束通话?

在Android post 2.3中,有没有办法结束通话?,android,telephony,Android,Telephony,我正在尝试开发类似于AutoAnswer的东西,但当广播接收器收到通知时,它也会自动挂断。我花了一整天的时间阅读关于这个问题的其他stackoverflow问题,似乎权限MODIFY_PHONE_STATE仅限于系统应用程序,然而,一些帖子说使用endCall();不需要此权限 我的问题有两部分: endCall()仍然可用吗?自从安卓2.3以来,它在任何地方都被使用过吗 如果是的话,我需要帮助使它工作,因为现在它不工作。我从以下网站下载ITelephony.aidl 然后把它装在一个包裹里。我

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

我的问题有两部分

  • endCall()
    仍然可用吗?自从安卓2.3以来,它在任何地方都被使用过吗
  • 如果是的话,我需要帮助使它工作,因为现在它不工作。我从以下网站下载
    ITelephony.aidl
    然后把它装在一个包裹里。我是新用户,因此无法发布图像
  • 这就是我的文件树在netbeans中的样子:

    这是在我的广播接收器中运行的代码。作为这个问题的解决方案,它已经在这里发布了很多次,但我仍然无法让它发挥作用:/

        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();
        }
    

    但是屏幕上没有显示任何内容。

    您可以使用以下代码:

    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);
    

    当您进入离线状态时,您可以看到显示“离线”的toast,然后
    setResultData(null)
    是结束调用。

    根据代码的状态,您无法判断是否引发了异常。也许对于started,您应该在catch块中添加一些调试输出。希望对您有所帮助。。首先了解logcat。然后想想你为什么要挂断用户的电话——这很少是一件合适的事情。一旦通话已经开始,这个代码会起作用吗?我不想阻止呼叫,我想结束当前呼叫。请参阅编辑的帖子,它是检测到的呼叫状态。我使用摘机状态结束通话,这是当您接受通话或当您输入号码并拨打感谢!明天早上我会试试这个。我试了这个,屏幕上会显示祝酒词,但电话永远不会结束。