如何以编程方式进行一响呼叫以及如何判断我呼叫的线路是不是已关闭?

Posted

技术标签:

【中文标题】如何以编程方式进行一响呼叫以及如何判断我呼叫的线路是不是已关闭?【英文标题】:How can I programmatically do a one ring call and how can I tell if the line I'm calling is off?如何以编程方式进行一响呼叫以及如何判断我呼叫的线路是否已关闭? 【发布时间】:2017-08-26 11:39:46 【问题描述】:

我希望我的 android 应用程序能够通过拨打一个铃声来判断给定电话号码是否正常工作(即我拨打该号码,等待我身边的第一个铃声响起,然后挂断)。如果没有响铃(即电话断开),我也想知道。这是一种对电话号码的 ping 操作。如果可以,怎么做?

【问题讨论】:

您知道,拨号音通常是指在您开始拨号之前,您自己的线路上发出的声音,让您知道自己的线路已接通,与您的号码无关'重新调用。我认为您的意思是说“通过打一个响铃”和“如果没有响铃”。此外,当您拨打电话时,有时如果电话断开连接,它会在发出 SIT 和“您拨打的号码不在服务中”消息之前响铃两次。还有几个案例。资料来源:我在呼叫中心工作。 谢谢!感谢您的更正:) 也许我读错了,但那不是 incoming 调用的代码吗?我的想法是打电话... 仅供参考:要实现此类功能,您几乎必须编写自己的拨号器应用程序。 我建议您通过检查网络信息来检查接收方手机/设备是否在线,并使用此信息来检查/扣除接收方的设备/手机是否在线和/或可以接听电话与否.. 希望这会有所帮助。 【参考方案1】:

您所指的声音称为“回铃音”。 “拨号音”是您在拿起未通话的已连接电话时听到的声音。

Android Telephony 类不允许 SDK 应用程序访问来收听呼叫音频,因此除非求助于 NDK,否则似乎无法监视回铃(尽管 some people 已报告成功收听传入和 outgoing 呼叫带有黑客的音频)

您的方法的问题是,即使您设法获得了音频,您也需要先听线路上的声音以暂停 - 这不可靠,因为一些提供商会读取无效状态的自动消息,而其他提供商甚至允许用户上传自己的回铃音(例如歌曲)。

您最好的选择是监听TelephonyManager.EXTRA_STATE_RINGING 何时开始,然后等待一段时间再挂断。 CALL_STATE_OFFHOOK 等其他状态与您的情况无关。

public void onReceive(Context context, Intent intent) 
    if (timer == null && TelephonyManager.EXTRA_STATE_RINGING.equals(intent.getStringExtra(TelephonyManager.EXTRA_STATE))) 
        timer = new Handler(); //member variable
        timer.postDelayed(new Runnable() 
            @Override
            public void run() 
                hangUp();
            
        , 1500); //arbitrary delay
    

【讨论】:

以上是关于如何以编程方式进行一响呼叫以及如何判断我呼叫的线路是不是已关闭?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式从应用程序打开呼叫面板

使用没有alertView的UIWebView在iOS中以编程方式进行电话呼叫

以编程方式进行Android会议和保持通话[重复]

在 iOS 中以编程方式呼叫号码时显示联系人姓名

是否可以对 UILabel 进行电话呼叫操作?

如何在呼叫状态更改为响铃时自动取消 Twilio 出站呼叫