我已阅读this blog post有关在您的应用中使用发送和接收短信所做的更改。我还阅读了本网站和其他人的各种讨论和答案。但是,我现在还不完全清楚这一切是如何运作的。我使用以下代码在我的应用程序中发送短信(用于一些简单的用户验证):
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNumber, null, "sms verification", null, null);
SMSReceiver smsReceiver = new SMSReceiver();
IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
我有一个BroadcastReceiver,其中包含以下onReceive方法:
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
Bundle bundle = intent.getExtras();
if (bundle != null){
SmsMessage[] messages = Telephony.Sms.Intents.getMessagesFromIntent(intent);
for (int i = 0; i < messages.length; i++) {
SmsMessage message = messages[i];
String phNum = message.getDisplayOriginatingAddress();
phNum = phNum.replaceAll("[^0-9]", "");
Log.i("SMSReceiver", "phone="+phNum);
}
}
}
}
在开发过程中,这在我的手机上运行良好(LG G3运行4.4.2)。但是,当我将应用程序分发给几个朋友时,应用程序从未使其脱离代码的发送阶段。他将自己的默认应用设置为环聊,但该应用尝试(未成功)通过股票Android SMS应用发送此消息。发送保持失败,因此它甚至从未进入BroadcastReceiver。
我不认为我必须成为默认的消息传递应用程序来实现这项功能,但我现在正在考虑这可能就是这个问题。有没有办法让我的应用程序将消息传递到手机的默认消息传递应用程序,并在BroadcastReceiver中接收它?如果从现有文档中可以看出这一点,我很抱歉,但我只是没有得到它,我正在寻找一个更好的解释,为什么这可以在我的手机上运行KitKat(使用股票短信应用作为我的默认),但是不是在朋友的手机上运行Lollipop并使用环聊作为默认设置。谢谢!
这是一个截图,显示手机正试图通过股票短信应用程序发送消息: