Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何仅在断开呼叫后获取警报对话框?_Android_Android Intent_Broadcastreceiver - Fatal编程技术网

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

Android 如何仅在断开呼叫后获取警报对话框?,android,android-intent,broadcastreceiver,Android,Android Intent,Broadcastreceiver,在我的应用程序中,我做的一件事是,当来电者或接收者断开通话时,手机号码会显示一个警报对话框。这一切都正常,但问题是,当我接到电话时,警报对话框也会出现,但我只想在断开后出现,我不知道我犯了什么错误,下面是我的代码,有人能帮忙吗 public class MyCallReceiver extends BroadcastReceiver { private String incomingNumber; @Override public void onReceive(Context co

在我的应用程序中,我做的一件事是,当来电者或接收者断开通话时,手机号码会显示一个警报对话框。这一切都正常,但问题是,当我接到电话时,警报对话框也会出现,但我只想在断开后出现,我不知道我犯了什么错误,下面是我的代码,有人能帮忙吗

     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



    }
}

您在错误的地方编写了代码。此代码

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
状态

您的条件是错误的。您正在使用的是else块

if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING)
当通话状态变为“理想”或“摘机”时,它将运行(在呼出通话中-当拨出并断开通话时,在呼入通话中-当接听并断开通话时)

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

if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_IDEAL)
并在if块中编写代码

至于数字,您无法通过这种方式获取数字,因为它仅对振铃状态有效。 一种解决方法是在调用日志上使用。只要调用日志中有更改,就会调用它的
onChange()
。然后您可以从通话记录中提取号码。但是您需要让应用程序的一部分为此处于活动状态。在
服务中使用
可能会被禁用

注意-在某些设备中,消息也会出现在呼叫日志数据中。所以,在显示对话之前,请检查通话记录中的最后一项是否为通话类型


您需要在
else..if
条件下开始您的活动,因为该操作会在您的手机断开连接时执行。@PiyushGupta抱歉,我无法理解您..抱歉,我的英语不好这将是
Intent i=新Intent(上下文,显示警报对话框.class);i、 addFlags(意图、标志、活动、新任务);i、 putExtra(“编号”,收入编号);背景。起始触觉(i)
else..if
条件中。你能给出答案吗..你需要在else-if条件中也写下它。我想当接听电话时,它仍然会显示对话框,ie phone进入“挂机”状态。此外,只有来电时,号码才会出现。@PiyushGupta您能告诉我什么是“仅断开连接”事件,并在我拨打电话时打开“警报”对话框。不仅断开连接,您对收件者的操作是什么。只有来电时,号码才会出现,ie
EXTRA_STATE
EXTRA_STATE_RINGING
put
intent.getStringExtra(TelephonyManager.EXTRA_STATE)
在日志中并在此处发布。我想你必须使用
调用状态\u IDLE
来代替
额外状态\u理想状态
我知道你的意思。试试我在上面的步骤中问的问题。断开呼叫时,您将无法获得号码。
额外的来电号码
仅对“振铃状态”有效。