在我的应用程序中,我做了一件事,当呼叫被呼叫者或接收者断开时,一个警报对话框应该出现手机号码。一切正常,但问题是警报对话框也出现在我接到电话时,但我只想在断开连接之后,我不知道我正在制作的错误是我的代码......可以帮助吗?
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
}
}
答案 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()
中使用可能是。
注意 - 在某些设备中,消息也会出现在呼叫日志数据中。因此,在显示对话之前,请检查通话记录中的最后一个条目是否已显示您的对话