2012-06-06 30 views
4

我正在尝试开发类似于AutoAnswer的东西,但它也会在通知广播接收器时自动挂断。我已经花了整整一天阅读关于这个问题的其他stackoverflow问题,似乎许可MODIFY_PHONE_STATE仅限于系统应用程序,但是,一些职位表示,使用endCall();不需要此权限。有没有什么办法可以在Android 2.3后结束通话?

我的问题有两个部分

  1. endCall()仍然可用?自从Android 2.3以来它有没有在任何情况下使用过?
  2. 如果是这样,我需要帮助使它工作,因为现在它不工作。我从http://code.google.com/p/autoanswer/source/browse/trunk/src/com/#com/android/internal/telephony 下载ITelephony.aidl并将其放入包装中。我是新用户,因此我无法发布图片。

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

但没有显示在屏幕上..

+0

随着代码的状态,您无法判断是否抛出了异常。也许开始你应该添加一些调试输出到你的catch块。 – Paulpro

+0

希望它有助于.. http://stackoverflow.com/questions/10860369/fetch-dial-number-while-calling –

+0

首先了解logcat。然后想想为什么你想把用户的手机挂在他们身上 - 这很少是合适的事情。 –

回答

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

,你可以看到一个敬酒,显示“摘机”,然后setResultData(null);末是电话。

+0

一旦通话已经进行,此代码是否可以工作?我不想阻止通话,我想结束当前通话。 – user1304281

+0

看到编辑后,它检测到呼叫状态。我正在使用OFFHOOK状态进行结束通话,当您接听电话或当您输入号码并拨打 – AliSh

+0

谢谢!明天早上我会试试这个。 – user1304281

相关问题