4

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

我的问题有两个部分

  1. endCall()还能用吗?自 Android 2.3 以来,它是否曾在任何地方使用过?
  2. 如果是,我需要帮助使它工作,因为现在它不工作。我ITelephony.aidlhttp://code.google.com/p/autoanswer/source/browse/trunk/src/com/#com/android/internal/telephony下载 并将其放入一个包中。我是新用户,不能发图片。

这是我的文件树在 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();
    }

但是屏幕上什么都没有显示。。

4

1 回答 1

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

于 2012-06-06T02:58:41.057 回答