我想构建一个可以通过预先确定的短信联系当前呼叫者的Android应用程序。发送文本消息很简单,但在独立应用程序中确定当前呼叫者的电话号码是一项挑战。是否有一种简单的方法来判断电话号码,以便我可以在通话时向他们发送信息?
当然有手动方法可以做到这一点:记下号码,将其键入新短信,输入信息。但我想预先定义消息并能够“将其发送给当前的呼叫者”。
答案 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()
同步查询当前 呼叫状态。
这样,您无需用户在接听电话之前启动您的应用。