在呼叫结束广播接收器中获取电话号码?

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 中获取电话号码。

【问题讨论】:

确保您在清单中添加了接收器,并在清单中添加了读取手机状态的权限。 是的,我添加了,但仍然没有得到电话号码。 请张贴您的清单文件@ahmed 【参考方案1】:

在您的 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();
    


【讨论】:

以上是关于在呼叫结束广播接收器中获取电话号码?的主要内容,如果未能解决你的问题,请参考以下文章

从广播接收器关闭活动

广播接收器未被呼叫

在服务中获取上下文

如何将结果数据从广播接收器发送到活动

如何将联系人信息放入短信广播接收器类?

广播接收者案例_ip拨号器