如何在独立应用程序中确定当前呼叫者的电话号码

时间:2012-02-21 23:12:18

标签: android phone-number phone-call

我想构建一个可以通过预先确定的短信联系当前呼叫者的Android应用程序。发送文本消息很简单,但在独立应用程序中确定当前呼叫者的电话号码是一项挑战。是否有一种简单的方法来判断电话号码,以便我可以在通话时向他们发送信息?

当然有手动方法可以做到这一点:记下号码,将其键入新短信,输入信息。但我想预先定义消息并能够“将其发送给当前的呼叫者”。

3 个答案:

答案 0 :(得分:4)

@Override
public void onReceive(Context context, Intent intent) {

    TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    PhoneCallStateListener customPhoneListener = new PhoneCallStateListener(context);
    telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
    helper = new ContactDatabaseHelper(context);
    list = helper.getAllContacts();

    try{
        incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);

        if (list.size() != 0){
            for ( int i  = 0, size = list.size(); i < size; i++ ){
                if (PhoneNumberUtils.compare(incomingNumber, list.get(i).getContactNumber())){                  
                    ToastMsg.showToast(context,list.get(i).getContactName()+" Calling");
                }
            }
        }


    }catch (Exception e) {
        // TODO: handle exception
    }   

}


public class PhoneCallStateListener extends PhoneStateListener{
private Context context;

public PhoneCallStateListener(Context context){
    this.context = context;
}

@Override
public void onCallStateChanged(int state, String incomingNumber) {  

    switch (state) {

        case TelephonyManager.CALL_STATE_RINGING:       


            break;
        case PhoneStateListener.LISTEN_CALL_STATE:

    }
    super.onCallStateChanged(state, incomingNumber);
}
}

答案 1 :(得分:3)

对于你的sistuation,我能想到的最好的就是使用PhoneStateListener。它包含onCallStateChanged处理程序。其中一个参数是一个包含传入电话号码的字符串。

来源: http://developer.android.com/reference/android/telephony/PhoneStateListener.html

Ctrl + F并输入“Incoming”,您将找到所有需要知道的内容。

编辑:要确保您的手机启动时启动应用,只需添加一个BroadcastReciever即可。 How to start an Application on startup?

答案 2 :(得分:1)

在清单中注册侦听ACTION_PHONE_STATE_CHANGED的BroadcastReceiver。

  

广播意图动作,表示呼叫状态(蜂窝)开启   设备已经改变。

     

EXTRA_STATE extra表示新的呼叫状态。如果是新状态   是RINGING,第二个额外EXTRA_INCOMING_NUMBER提供传入   电话号码为字符串。

     

需要READ_PHONE_STATE权限。

     

这是版本1.0中的粘性广播,但它已不再存在   黏。而是使用getCallState()同步查询当前   呼叫状态。

这样,您无需用户在接听电话之前启动您的应用。