【问题标题】:Is there any way at all to end a call in Android post 2.3?有什么办法可以在 Android 2.3 后结束通话吗?
【发布时间】:2012-06-06 02:23:11
【问题描述】:

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

我的问题分为两部分

  1. endCall() 还能用吗?自 Android 2.3 以来,它是否曾在任何地方使用过?
  2. 如果是这样,我需要帮助使它工作,因为现在它不工作。我从http://code.google.com/p/autoanswer/source/browse/trunk/src/com/#com/android/internal/telephony下载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();
    }

但屏幕上什么都没有显示..

【问题讨论】:

  • 根据您的代码状态,您无法判断是否引发了异常。也许一开始你应该在你的 catch 块中添加一些调试输出。
  • 希望对您有所帮助.. stackoverflow.com/questions/10860369/…
  • 先了解一下logcat。然后想想你为什么要挂断用户的电话——这很少是一件合适的事情。

标签: android telephony


【解决方案1】:

您可以使用此代码:

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”的 toast,然后setResultData(null); 结束通话。

【讨论】:

  • 一旦调用已经在进行中,这段代码会起作用吗?我不想阻止通话,我想结束当前通话。
  • 查看编辑后的帖子,检测到呼叫状态。我正在使用 OFFHOOK 状态结束通话,即当您接听电话或输入号码并拨号时
  • 谢谢!我明天早上试试这个。
  • 我试过了,但 toast 消息显示在屏幕上,但通话永远不会结束。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-06
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
  • 2014-07-01
  • 1970-01-01
相关资源
最近更新 更多