6

有很多用于移动电话的呼叫阻止应用程序,例如 NQ Call Blocker。但在这些应用程序中,如果我们将号码添加到黑名单,呼叫者会听到“忙音”。此外,呼叫者可以在几分之一秒内听到“铃声”。这意味着,看起来我们是故意拒绝来电。

现在,我正在尝试开发一个呼叫阻止应用程序,它可以发送“无法到达的提示音”,而不是“忙音”......??

例如,从另一个号码拨打您的手机,当它响铃时,尝试将您的模式更改为“飞行模式”。您将听到“无法到达的提示音”。[可能在某些安卓设备上,当手机响铃时,长按电源键,开启“飞行模式”。]

4

3 回答 3

5

您的手机不会发送“无法接通”信号。相反,它是由您的运营商发送的。

当您的号码无法联系到时,它的字面意思是手机信号塔无法联系到您。所以当有人打电话给你时,塔会试图找到你,如果找不到,它会发送“无法到达”的信号。您不能伪造一个并从您的设备发送它。

于 2013-09-03T14:52:35.327 回答
4

您可以尝试实现一个PhoneStateListener,当您接到电话时,您将其与您的数字数组进行比较,如果禁止您切换到飞行模式。像这样的东西:

case TelephonyManager.CALL_STATE_RINGING: // incoming call
{
    for (int i = 0; i < forbiddenNumber.size; i++) {
        if (incomingNumber.equals(forbiddenNumber[i])) {
            // read the airplane mode setting
            boolean isEnabled = Settings.System.getInt(
                    getContentResolver(),
                    Settings.System.AIRPLANE_MODE_ON, 0) == 1;

            // toggle airplane mode
            Settings.System.putInt(getContentResolver(),
                    Settings.System.AIRPLANE_MODE_ON, isEnabled ? 0
                            : 1);

            // Post an intent to reload
            Intent intent = new Intent(
                    Intent.ACTION_AIRPLANE_MODE_CHANGED);
            intent.putExtra("state", !isEnabled);
            sendBroadcast(intent);

        }
    }

不要忘记许可WRITE_SETTINGS

于 2013-09-09T14:55:09.630 回答
3

由于您无法做到这一点,正如 Raghav 指出的那样,您下一个可能的思路是伪造那些运营商 DTMF 控制音,例如网络忙、电话号码断开等。

然后您很快就会发现您的应用程序也无法做到这一点......它不能“伪造” DTMF 音调 - 无论是在接听电话之前(因为您不是电话公司),也不是在接听电话之后回答,许多人认为这是 google-android 的疏忽。这里有很多关于两者的帖子。

是的,当然我们可以手动输入 DTMF(或者我们无法拨打分机、打入帐号等),只是 APP 无法自动执行此操作……这让许多 PBX 开发人员很烦恼. 对不起,这对我们所有人来说都是不幸的......

于 2013-09-04T22:49:46.400 回答