在呼叫结束广播接收器中获取电话号码?
Posted
技术标签:
【中文标题】在呼叫结束广播接收器中获取电话号码?【英文标题】:Get phone number in Call End Broadcast Receiver? 【发布时间】:2014-08-10 20:07:34 【问题描述】:我正在开发一个应用程序,它一个接一个地进行一系列调用。为了检测到通话已经结束,我创建了广播接收器,它在通话结束时成功触发,但我无法获取其中的电话号码。这是我的代码
public class EndCallReceiver extends BroadcastReceiver
Preferences pref;
Context ctx;
@Override
public void onReceive(Context context, Intent intent)
ctx = context;
pref = new Preferences(ctx);
Bundle extras = intent.getExtras();
if (extras != null)
String state = extras.getString(TelephonyManager.EXTRA_STATE);
String incomingNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
if (state.equals(TelephonyManager.EXTRA_STATE_IDLE))
Toast.makeText( ctx, incomingNumber, Toast.LENGTH_LONG).show();
Toast 中没有显示任何内容。传入编号为空。谁能告诉我。如何在结束通话 BroadcastReceiver 中获取电话号码。
【问题讨论】:
确保您在清单中添加了接收器,并在清单中添加了读取手机状态的权限。在您的 androidManifest.xml 中,您需要注册广播:
<receiver android:name=".EndCallReceiver" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
您的代码:
public class EndCallReceiver extends BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent)
Bundle bundle = intent.getExtras();
String phoneNumber= bundle.getString("incoming_number");
【讨论】:
【参考方案2】:问题是当下面被调用时没有关联的电话号码。
if (state.equals(TelephonyManager.EXTRA_STATE_IDLE))
试试下面的代码:
当电话响起时,电话号码会被保存,稍后当电话响起时 断开连接然后显示之前的号码。
public class CallReceiver extends BroadcastReceiver
static boolean isRinging = false;
String number = "";
@Override
public void onReceive(Context context, Intent intent)
Log.v("ranjith", "entered onregister");
// Get the current Phone State
String phoneState = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
if (phoneState == null)
return;
// If phone is "Ringing"
if (phoneState.equals(TelephonyManager.EXTRA_STATE_RINGING))
isRinging = true;
number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
Log.v("ranjith", "phone ringing");
// if phone is idle after ringing
if (phoneState.equals(TelephonyManager.EXTRA_STATE_IDLE))
Log.v("ranjith", "call ended of number" + number);
Toast.makeText(context, "Number is " + number, Toast.LENGTH_LONG).show();
【讨论】:
以上是关于在呼叫结束广播接收器中获取电话号码?的主要内容,如果未能解决你的问题,请参考以下文章