如何检测电话开始拨打电话的时间。 我正在开发一个应用程序,我正在尝试以编程方式进行呼叫以及何时连接呼叫(振铃)。我想要回复一些回复(比如连接)。我正在尝试下面的代码,它能够拨打电话,但不知道如何获得响应。
Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"mobile no."));
startActivity(callIntent);
提前感谢您的时间和考虑。
编辑:当拨出电话连接时(振铃状态),我想要取回通知。像吐司或任何其他相关的东西。可能吗?
答案 0 :(得分:1)
您必须使用BroadcastReceiver来侦听调用事件,然后在触发时处理它。这是我在Google上找到的一个很好的教程。
答案 1 :(得分:1)
我知道它已经有一段时间,但我希望对仍在寻找解决方案的人有所帮助!
我最近不得不在一个类似的项目上工作,我需要捕获拨出呼叫的振铃状态,我能找到的唯一方法是使用本机拨号应用程序的隐藏Api。这只适用于android> 5.0因为api的变化。这是在Android 5.0.1上测试过的,并且像魅力一样。 (p.s.你需要一个有根设备才能工作,因为你需要将你的应用程序安装为系统应用程序(google how!),然后才能检测出局呼叫状态。)
对于记录,PhoneStateListener不能用于检测许多帖子中提到的传出呼叫状态。
首先,在清单文件
中添加此权限<uses-permission android:name="android.permission.READ_PRECISE_PHONE_STATE" />
然后定义你broadcastreceiver,(这是一个示例代码!)
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
public class MyBroadcastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, final Intent intent)
{
switch (intent.getIntExtra("foreground_state", -2)) {
case 0: // PreciseCallState.PRECISE_CALL_STATE_IDLE:
System.out.println("IDLE");
break;
case 3: // PreciseCallState.PRECISE_CALL_STATE_DIALING:
System.out.println("DIALING");
break;
case 4: // PreciseCallState.PRECISE_CALL_STATE_ALERTING:
System.out.println("ALERTING");
break;
case 1: // PreciseCallState.PRECISE_CALL_STATE_ACTIVE:
System.out.println("ACTIVE");
break;
}
}
}
我用它们的值替换了一些常量,因为我看到很多人不熟悉反射概念(为了方便)。 警报基本上是接收器实际响铃时的状态!这不包括通话设置时间!所以你可以通过使用
来获得该案例陈述中的时间System.currentTimeMillis();
或您希望的其他格式!
答案 2 :(得分:0)
通过常规的非系统应用程序无法检测到 - 没有Android API。 我找不到办法,我在很长一段时间内用Google搜索解决方案: - (
没有办法(很遗憾,因为我需要它)来检测拨出电话开始振铃的时间。