如何在断开连接呼叫后获取警报对话框?

时间:2015-06-04 04:35:27

标签: android android-intent broadcastreceiver

在我的应用程序中,我做了一件事,当呼叫被呼叫者或接收者断开时,一个警报对话框应该出现手机号码。一切正常,但问题是警报对话框也出现在我接到电话时,但我只想在断开连接之后,我不知道我正在制作的错误是我的代码......可以帮助吗?

     public class MyCallReceiver extends BroadcastReceiver {

private String incomingNumber;

@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    if  (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_IDLE)) {
        // This code will execute when the phone has an incoming call

        // get the phone number 

        incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
        Intent i = new Intent(context, Disp_Alert_dialog.class); 
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        i.putExtra("Number", incomingNumber);
        context.startActivity(i);
        Toast.makeText(context, "Call from:" +incomingNumber, Toast.LENGTH_LONG).show();


       /* String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
        Toast.makeText(context, "Call from:" +incomingNumber, Toast.LENGTH_LONG).show();*/

    } else if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
            TelephonyManager.EXTRA_STATE_IDLE)
            || intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
                    TelephonyManager.EXTRA_STATE_OFFHOOK)) {
        // This code will execute when the call is disconnected



    }
}

2 个答案:

答案 0 :(得分:1)

您已将代码写入错误的位置。这段代码

Intent i = new Intent(context, Disp_Alert_dialog.class);   
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("Number", incomingNumber); 
context.startActivity(i);

将处于else..if条件而不是if条件。

答案 1 :(得分:1)

你的情况是错误的。你正在使用

的else块
Enter 1st number :1
Enter 2nd number :2
Equation : 1 + 2 = 3

只要呼叫状态变为“理想”或“摘机”(拨出呼叫时 - 拨打电话和呼叫断开,来电时 - 接听电话并断开呼叫),它就会运行。

如果您只想在断开通话时显示对话框,请使用

if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING)

并在if块中编写代码

至于号码,你不能得到那个号码,因为它只对振铃状态有效。 解决方法是在CallLog上使用ContentObserver。只要呼叫记录发生变化,就会调用if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_IDEAL) 。然后,您可以从通话记录中获取号码。但是,您需要将应用程序的一部分激活。在onChange()中使用可能是。

注意 - 在某些设备中,消息也会出现在呼叫日志数据中。因此,在显示对话之前,请检查通话记录中的最后一个条目是否已显示您的对话

This may help you in using content observer