有很多关于如何使用Android API发送短信的信息(具体来说,使用SmsManager
API的android.telephony
类)。但是,这些示例始终使用标准电话号码(123-456-7890)。
您不能简单地使用电子邮件地址作为String destinationAddress
的输入;它必须是电话号码。但是,股票Android消息客户端可以正常处理电子邮件地址。所以它显然在技术上是可行的,但我宁愿不对Google的消息传递应用程序进行反向工程,以弄清楚它们是如何工作的。
根据我的研究,必须将SMS消息发送到运营商运行的SMS网关,并且SMS消息正文必须以某种方式格式化(同样,特定于运营商)。我很好,但是A)如果有一个独立于运营商的解决方案,我宁愿这样做,而且B)我似乎无法在任何地方找到Verizon SMS网关号码/消息格式。例如,我找到了AT& T号码: 111 和消息格式: dummy@email.com(主题)正文
要明确的是,我对使用电子邮件客户端/“互联网”毫无兴趣。我特别想使用短信。
答案 0 :(得分:0)
您似乎在这里引用了两个独立的模型。
一个是连接到移动网络的普通设备(例如Android手机),用户可以通过该网络向手机号码或电子邮件地址发送短信。
另一种是群发短信发送或接收服务器(例如运行短信投票的网站)。在该模型中,网站通过因特网发送大量SMS,使用诸如SMPP的协议以运营商特定的方式编码到属于运营商的SMS网关服务器。来自客户的特定号码的短信从运营商网络中的短消息服务中心路由到运营商的网关服务器,然后配置为通过互联网将它们转发到您自己的服务器,具有相同的运营商特定编码。 / p>
我从你的问题中了解到,你想要实现第一个,而不是第二个。
你说“要明确,我对使用电子邮件客户端/”互联网“根本不感兴趣。我特别想使用短信。”
在GSM(2G)或UMTS(3G)网络上,通过标准移动网络协议发送SMS,并且不涉及IP连接。网络协议仅接受电话号码作为目的地地址。 这可能就是为什么Android SMSManager只接受电话号码作为输入。
Google应用必须为其目标地址为电子邮件地址的短信使用IP连接 - 没有原生移动网络协议。因此,如果您想提供相同的服务,则无法避免互联网连接。
现在有一种新的移动网络正在使用,称为LTE(4G)。在这些网络中,一些旧的移动协议(包括SMS)已经消除(它们太多而且复杂)。相反,作为在网络上注册过程的一部分,您的手机会建立到网络的IP连接。因此,在4G网络上,无论如何,所有短信都会在幕后通过IP连接。有关如何实现这一点的详细信息是特定于运营商的,但对于刚刚使用Android SMSManager的任何应用程序都应该是不可见的。我只是提到这一点来说明未来是永远在线的IP连接。
android.telephony.smsManager documentation并不十分有用 - 它只是将目标地址和SMSC地址参数描述为字符串,而不是定义基于文本的SMS可以发送给谁。由于没有提及电子邮件地址,并且因为它是普通2G / 3G类型移动网络短信的标准输入,我假设只接受手机号码。
public void sendTextMessage(String destinationAddress,String scAddress,String text,PendingIntent sentIntent,PendingIntent deliveryIntent)在API级别4中添加
发送基于短信的文字。
参数
的地址
destinationAddress要将消息发送到scAddress是服务中心地址,或者为null以使用当前默认的SMSC