`
Jessical08
  • 浏览: 13548 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android监听SMS发送状态并获取短信服务中心号码

阅读更多

监听SMS发送状态的例子网上虽然有,但还是太杂了不完全。自己写了个。

短信服务中心号码的获取是通过SmsMessage.getServiceCenterAddress()方法获得。也就是只能从已经存储在你手机 上的短信中获取。本例子获取短信服务号码的思路是发送一个自定义字符串到10086去,拦截10086下行的短信从中读取短信服务号码。测试后发现虽然在 本手机卡为深圳号,但收到的短信服务中心号码却是佛山的。但至少知道是处于哪个省了。

全国短信服务中心号码详见:http://zdm2008.blog.163.com/blog/static/20491545201062210921272/

另外一份详细的中国联通的短信服务中心号码详见:http://wenku.baidu.com/view/7acddc1b6bd97f192279e9c0.html

本例子还用Java代码实现布局。

send:短信是否发送出去。

delivery:短信是否发送到收件人中。

  1. package  lab.sodino.servicecenteraddress;  
  2. import  android.app.Activity;  
  3. import  android.app.PendingIntent;  
  4. import  android.content.BroadcastReceiver;  
  5. import  android.content.Context;  
  6. import  android.content.Intent;  
  7. import  android.content.IntentFilter;  
  8. import  android.os.Bundle;  
  9. import  android.telephony.gsm.SmsManager;  
  10. import  android.telephony.gsm.SmsMessage;  
  11. import  android.view.Gravity;  
  12. import  android.view.View;  
  13. import  android.widget.Button;  
  14. import  android.widget.LinearLayout;  
  15. import  android.widget.TextView;  
  16. import  android.widget.LinearLayout.LayoutParams;  
  17. public   class  ServiceCenterAddressAct  extends  Activity {  
  18.     private   static   final  String ACTION_SMS_SEND =  "lab.sodino.sms.send" ;  
  19.     private   static   final  String ACTION_SMS_DELIVERY =  "lab.sodino.sms.delivery" ;  
  20.     private   static   final  String ACTION_SMS_RECEIVER =  "android.provider.Telephony.SMS_RECEIVED" ;  
  21.     private  TextView serviceCenterAddressText;  
  22.     private  SMSReceiver sendReceiver;  
  23.     private  SMSReceiver deliveryReceiver;  
  24.     private  SMSReceiver smsReceiver;  
  25.     /** Called when the activity is first created. */   
  26.     @Override   
  27.     public   void  onCreate(Bundle savedInstanceState) {  
  28.         super .onCreate(savedInstanceState);  
  29.         LinearLayout.LayoutParams layParams = new  LinearLayout.LayoutParams(  
  30.                 LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);  
  31.         LinearLayout linearLay = new  LinearLayout( this );  
  32.         linearLay.setOrientation(LinearLayout.VERTICAL);  
  33.         linearLay.setLayoutParams(layParams);  
  34.         TextView textView = new  TextView( this );  
  35.         textView.setBackgroundColor(0xffffffff );  
  36.         textView.setTextColor(0xff0000ff );  
  37.         textView.setTextSize(20 );  
  38.         textView.setText("点击发送按钮将发送自定义字符串至10086" );  
  39.         textView.setGravity(Gravity.CENTER);  
  40.         linearLay.addView(textView);  
  41.         Button btnSend = new  Button( this );  
  42.         // LinearLayout.LayoutParams btnParams = new LinearLayout.LayoutParams(   
  43.         // LinearLayout.LayoutParams.FILL_PARENT,   
  44.         // LinearLayout.LayoutParams.WRAP_CONTENT);   
  45.         btnSend.setText("发送" );  
  46.         btnSend.setOnClickListener(new  Button.OnClickListener() {  
  47.             public   void  onClick(View v) {  
  48.                 serviceCenterAddressText.setText("正在等待发送短信..." );  
  49.                 sendSms();  
  50.             }  
  51.         });  
  52.         linearLay.addView(btnSend);  
  53.         serviceCenterAddressText = new  TextView( this );  
  54.         serviceCenterAddressText.setText("正在等待发送短信..." );  
  55.         serviceCenterAddressText.setBackgroundColor(0xffffffff );  
  56.         serviceCenterAddressText.setTextColor(0xff0000ff );  
  57.         serviceCenterAddressText.setTextSize(20 );  
  58.         serviceCenterAddressText.setGravity(Gravity.LEFT);  
  59.         linearLay.addView(serviceCenterAddressText);  
  60.         setContentView(linearLay);  
  61.         // 注册send   
  62.         sendReceiver = new  SMSReceiver();  
  63.         IntentFilter sendFilter = new  IntentFilter(ACTION_SMS_SEND);  
  64.         registerReceiver(sendReceiver, sendFilter);  
  65.         // 注册delivery   
  66.         deliveryReceiver = new  SMSReceiver();  
  67.         IntentFilter deliveryFilter = new  IntentFilter(ACTION_SMS_DELIVERY);  
  68.         registerReceiver(deliveryReceiver, deliveryFilter);  
  69.         // 注册接收下行receiver   
  70.         smsReceiver = new  SMSReceiver();  
  71.         IntentFilter receiverFilter = new  IntentFilter(ACTION_SMS_RECEIVER);  
  72.         registerReceiver(smsReceiver, receiverFilter);  
  73.     }  
  74.     protected   void  onPause() {  
  75.         unregisterReceiver(sendReceiver);  
  76.         unregisterReceiver(deliveryReceiver);  
  77.         unregisterReceiver(smsReceiver);  
  78.     }  
  79.     private   void  sendSms() {  
  80.         String smsBody = "lab.sodino.sms.test" ;  
  81.         String smsAddress = "10086" ;  
  82.         SmsManager smsMag = SmsManager.getDefault();  
  83.         Intent sendIntent = new  Intent(ACTION_SMS_SEND);  
  84.         PendingIntent sendPI = PendingIntent.getBroadcast(this 0 , sendIntent,  
  85.                 0 );  
  86.         Intent deliveryIntent = new  Intent(ACTION_SMS_DELIVERY);  
  87.         PendingIntent deliveryPI = PendingIntent.getBroadcast(this 0 ,  
  88.                 deliveryIntent, 0 );  
  89.         smsMag.sendTextMessage(smsAddress, null , smsBody, sendPI, deliveryPI);  
  90.     }  
  91.     public   class  SMSReceiver  extends  BroadcastReceiver {  
  92.         public   void  onReceive(Context context, Intent intent) {  
  93.             String actionName = intent.getAction();  
  94.             int  resultCode = getResultCode();  
  95.             if  (actionName.equals(ACTION_SMS_SEND)) {  
  96.                 switch  (resultCode) {  
  97.                 case  Activity.RESULT_OK:  
  98.                     serviceCenterAddressText  
  99.                             .append("\n[Send]SMS Send:Successed!" );  
  100.                     break ;  
  101.                 case  SmsManager.RESULT_ERROR_GENERIC_FAILURE:  
  102.                     serviceCenterAddressText  
  103.                             .append("\n[Send]SMS Send:RESULT_ERROR_GENERIC_FAILURE!" );  
  104.                     break ;  
  105.                 case  SmsManager.RESULT_ERROR_NO_SERVICE:  
  106.                     serviceCenterAddressText  
  107.                             .append("\n[Send]SMS Send:RESULT_ERROR_NO_SERVICE!" );  
  108.                     break ;  
  109.                 case  SmsManager.RESULT_ERROR_NULL_PDU:  
  110.                     serviceCenterAddressText  
  111.                             .append("\n[Send]SMS Send:RESULT_ERROR_NULL_PDU!" );  
  112.                     break ;  
  113.                 case  SmsManager.RESULT_ERROR_RADIO_OFF:  
  114.                     break ;  
  115.                 }  
  116.             } else   if  (actionName.equals(ACTION_SMS_DELIVERY)) {  
  117.                 switch  (resultCode) {  
  118.                 case  Activity.RESULT_OK:  
  119.                     serviceCenterAddressText  
  120.                             .append("\n[Delivery]SMS Delivery:Successed!" );  
  121.                     break ;  
  122.                 case  SmsManager.RESULT_ERROR_GENERIC_FAILURE:  
  123.                     serviceCenterAddressText  
  124.                             .append("\n[Delivery]SMS Delivery:RESULT_ERROR_GENERIC_FAILURE!" );  
  125.                     break ;  
  126.                 case  SmsManager.RESULT_ERROR_NO_SERVICE:  
  127.                     serviceCenterAddressText  
  128.                             .append("\n[Delivery]SMS Delivery:RESULT_ERROR_NO_SERVICE!" );  
  129.                     break ;  
  130.                 case  SmsManager.RESULT_ERROR_NULL_PDU:  
  131.                     serviceCenterAddressText  
  132.                             .append("\n[Delivery]SMS Delivery:RESULT_ERROR_NULL_PDU!" );  
  133.                     break ;  
  134.                 case  SmsManager.RESULT_ERROR_RADIO_OFF:  
  135.                     serviceCenterAddressText  
  136.                             .append("\n[Delivery]SMS Delivery:RESULT_ERROR_RADIO_OFF!" );  
  137.                     break ;  
  138.                 }  
  139.                 serviceCenterAddressText.append("\n正在等待下行短信..." );  
  140.             } else   if  (actionName.equals(ACTION_SMS_RECEIVER)) {  
  141.                 System.out.println("[Sodino]result = "  + resultCode);  
  142.                 Bundle bundle = intent.getExtras();  
  143.                 if  (bundle !=  null ) {  
  144.                     Object[] myOBJpdus = (Object[]) bundle.get("pdus" );  
  145.                     SmsMessage[] messages = new  SmsMessage[myOBJpdus.length];  
  146.                     for  ( int  i =  0 ; i < myOBJpdus.length; i++) {  
  147.                         messages[i] = SmsMessage  
  148.                                 .createFromPdu((byte []) myOBJpdus[i]);  
  149.                     }  
  150.                     SmsMessage message = messages[0 ];  
  151.                     serviceCenterAddressText.append("\n短信服务中心号码为:"   
  152.                             + message.getServiceCenterAddress());  
  153.                 }  
  154.             }  
  155.         }  
  156.     }  
  157. }  

最后要在AndroidManifest.xml中添加下面两个权限:

  1. < uses-permission   android:name = "android.permission.SEND_SMS" > </ uses-permission >   
  2. < uses-permission   android:name = "android.permission.RECEIVE_SMS" > </ uses-permission >  
分享到:
评论

相关推荐

    Android发送信息源码

    String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)`: 这是发送文本短信的主要方法,参数包括目标电话号码、服务中心地址、短信内容、发送成功的PendingIntent以及送达状态的...

    android接收和发送短信

    - `scAddress`:短信服务中心地址,通常设置为`null`以使用系统默认值。 - `content`:短信内容。 - `pendingIntent`:发送结果的意图,用于回调发送状态,例如成功、失败或取消。 - `sentIntent`:当短信被成功...

    android发送短信源代码

    2. `scAddress`:服务中心号码,一般为空,系统会自动选择。 3. `text`:要发送的短信内容。 4. `sentIntent`:如果提供,当短信发送成功时,系统会回调这个Intent。 5. `deliveryIntent`:如果提供,当短信送达时,...

    安卓Android源码——sms1.rar

    - **TelephonyManager**: 这是 Android SDK 提供的接口,用于获取与电话相关的各种信息,包括获取 SMS 服务。 - **SmsManager**: 是 Android 系统中用于处理 SMS 功能的主要类,提供发送短信、接收短信回调等功能...

    Android发送短信案例

    - `scAddress`:服务中心号码(SMSC),通常在发送国内短信时可以为空。 - `text`:要发送的短信内容。 - `sentIntent`:一个PendingIntent,当短信发送成功或失败时,系统会通过这个Intent回调我们的应用。 ```...

    SendSMS.zip_android_sendsms(1).apk

    总结,"SendSMS.zip"是一个简单的Android SMS发送应用示例,它展示了如何利用Android SDK中的`SmsManager`类发送短信并监听发送状态。开发者可以通过这个例子学习和理解Android短信服务的基本用法,并在此基础上进行...

    mobile_sms.zip_mobile sms_手机_手机短信编程_短消息

    在移动通信领域,手机短信(Short Message Service,SMS)是一种广泛使用的通信方式,它允许用户通过手机设备发送和接收简短的文字信息。本文将详细探讨“手机短信编程”这一主题,包括基本概念、工作原理以及如何...

    安卓发短信源码 实例

    在这个函数中,`sendTextMessage()`方法接受四个参数:收件人的电话号码、发送者的短信服务中心号码(通常为null,系统会自动填充)、要发送的消息文本、发送状态回调的PendingIntent(可选)以及送达状态回调的...

    手机短信发送和接收 学习

    接着,手机通过无线电接口,通常是GSM、UMTS、LTE等移动通信网络,将这个数据包发送到短信服务中心(Short Message Service Center, SMSC)。 SMSC是短信系统的核心组件,负责存储、转发和路由短信。当接收到短信后...

    android发送短消息[归纳].pdf

    - `scAddress`: 短信服务中心号码(Short Message Service Center),在大多数情况下,可以设置为null,因为系统会自动选择正确的SC。 - `text`: 要发送的短信内容,字符串类型。 - `sentIntent`: 一个Intent对象...

    android短信收发流流程

    1. 自Android 6.0(API 23)起,应用需要动态获取发送短信的`SEND_SMS`权限。用户在运行时会收到请求,确认是否允许应用发送短信。 2. 接收短信一般不需要权限,但为了监听`SMS_RECEIVED`广播,需要在`...

    安卓发短信详细教程

    该方法需要四个参数:`destinationAddress`(收件人电话号码),`scAddress`(服务中心号码,通常可为空),`text`(短信内容),以及两个PendingIntent对象,用于监控短信的状态。 - `sentIntent`和`deliverIntent`是`...

    手机短信接收和发送手机短信接收和发送

    6. 网络服务提供商(ISP)的短信中心(SMSC)接收并存储短信,然后转发到目标手机。 7. 目标手机接收到短信后,操作系统解析数据,通过短信API回调通知应用,应用展示短信内容。 接收手机短信的流程相对简单: 1. ...

    用J2ME接收、发送SMS短信的实例源代码

    在本文中,我们将深入探讨如何使用J2ME来实现SMS短信的接收和发送功能,并基于提供的实例源代码进行学习。 首先,要理解J2ME中的SMS通信,我们需要了解两个关键概念:PDU(Protocol Data Unit)和AT命令。PDU是SMS...

    sms.rar_DEMO

    - **短信接收模块**:DEMO可能包含了一个接收短信的逻辑,这可能涉及监听短信消息中心(SMSC)的回调,或者在用户同意的情况下,通过权限获取系统接收到的短信。 3. **开发环境与集成** - 开发环境:DEMO可能是在...

    SendMSGInBackGround.rar_SendMSGInBackGround_android

    5. **事件监听(BroadcastReceiver)**:为了跟踪短信的发送状态,我们可以创建一个`BroadcastReceiver`,注册对`ACTION_SMS_SENT`广播的监听。当短信发送成功或失败时,系统会发送这个广播,我们的接收器可以接收到...

    sms socket

    SMS的传输基于GSM 03.40标准,其中规定了短消息服务中心(SMSC)与移动终端之间的交互。短信可以通过电路交换数据服务(CSD)或更常见的分组交换数据服务(GPRS/EDGE/3G/4G等)进行传输。短信的传输通常涉及到SMSC...

    系统短信源码库

    Telephony Service则负责与短信相关的操作,如发送短信、接收短信、设置短信中心号码等。 源码库中的关键组件可能包括以下几个部分: 1. **SMS Provider**: 这部分源码主要处理与数据库交互的逻辑,如添加新的短信...

    Android发送短信方法总结

    它接受目标地址、服务中心地址、短信内容以及发送和送达意图。这个方法与`sendDataMessage()`类似,只是它专门用于发送纯文本格式的短信。 除了上述方法,`SmsManager`还定义了一些常量,如`RESULT_ERROR_GENERIC_...

    SMS.rar_sms

    【标题】"SMS.rar_sms" 指的是一款与短信相关的客户端软件的源代码,它包含了一套用于发送和接收短信的应用程序的编程资源。在IT行业中,源代码是程序员用编程语言编写的原始指令,它是软件的基础,通过源代码可以...

Global site tag (gtag.js) - Google Analytics