- 浏览: 13544 次
- 性别:
- 来自: 上海
文章分类
监听SMS发送状态的例子网上虽然有,但还是太杂了不完全。自己写了个。
短信服务中心号码的获取是通过SmsMessage.getServiceCenterAddress()方法获得。也就是只能从已经存储在你手机 上的短信中获取。本例子获取短信服务号码的思路是发送一个自定义字符串到10086去,拦截10086下行的短信从中读取短信服务号码。测试后发现虽然在 本手机卡为深圳号,但收到的短信服务中心号码却是佛山的。但至少知道是处于哪个省了。
全国短信服务中心号码详见:http://zdm2008.blog.163.com/blog/static/20491545201062210921272/
另外一份详细的中国联通的短信服务中心号码详见:http://wenku.baidu.com/view/7acddc1b6bd97f192279e9c0.html
本例子还用Java代码实现布局。
send:短信是否发送出去。
delivery:短信是否发送到收件人中。
- package lab.sodino.servicecenteraddress;
- import android.app.Activity;
- import android.app.PendingIntent;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.os.Bundle;
- import android.telephony.gsm.SmsManager;
- import android.telephony.gsm.SmsMessage;
- import android.view.Gravity;
- import android.view.View;
- import android.widget.Button;
- import android.widget.LinearLayout;
- import android.widget.TextView;
- import android.widget.LinearLayout.LayoutParams;
- public class ServiceCenterAddressAct extends Activity {
- private static final String ACTION_SMS_SEND = "lab.sodino.sms.send" ;
- private static final String ACTION_SMS_DELIVERY = "lab.sodino.sms.delivery" ;
- private static final String ACTION_SMS_RECEIVER = "android.provider.Telephony.SMS_RECEIVED" ;
- private TextView serviceCenterAddressText;
- private SMSReceiver sendReceiver;
- private SMSReceiver deliveryReceiver;
- private SMSReceiver smsReceiver;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super .onCreate(savedInstanceState);
- LinearLayout.LayoutParams layParams = new LinearLayout.LayoutParams(
- LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
- LinearLayout linearLay = new LinearLayout( this );
- linearLay.setOrientation(LinearLayout.VERTICAL);
- linearLay.setLayoutParams(layParams);
- TextView textView = new TextView( this );
- textView.setBackgroundColor(0xffffffff );
- textView.setTextColor(0xff0000ff );
- textView.setTextSize(20 );
- textView.setText("点击发送按钮将发送自定义字符串至10086" );
- textView.setGravity(Gravity.CENTER);
- linearLay.addView(textView);
- Button btnSend = new Button( this );
- // LinearLayout.LayoutParams btnParams = new LinearLayout.LayoutParams(
- // LinearLayout.LayoutParams.FILL_PARENT,
- // LinearLayout.LayoutParams.WRAP_CONTENT);
- btnSend.setText("发送" );
- btnSend.setOnClickListener(new Button.OnClickListener() {
- public void onClick(View v) {
- serviceCenterAddressText.setText("正在等待发送短信..." );
- sendSms();
- }
- });
- linearLay.addView(btnSend);
- serviceCenterAddressText = new TextView( this );
- serviceCenterAddressText.setText("正在等待发送短信..." );
- serviceCenterAddressText.setBackgroundColor(0xffffffff );
- serviceCenterAddressText.setTextColor(0xff0000ff );
- serviceCenterAddressText.setTextSize(20 );
- serviceCenterAddressText.setGravity(Gravity.LEFT);
- linearLay.addView(serviceCenterAddressText);
- setContentView(linearLay);
- // 注册send
- sendReceiver = new SMSReceiver();
- IntentFilter sendFilter = new IntentFilter(ACTION_SMS_SEND);
- registerReceiver(sendReceiver, sendFilter);
- // 注册delivery
- deliveryReceiver = new SMSReceiver();
- IntentFilter deliveryFilter = new IntentFilter(ACTION_SMS_DELIVERY);
- registerReceiver(deliveryReceiver, deliveryFilter);
- // 注册接收下行receiver
- smsReceiver = new SMSReceiver();
- IntentFilter receiverFilter = new IntentFilter(ACTION_SMS_RECEIVER);
- registerReceiver(smsReceiver, receiverFilter);
- }
- protected void onPause() {
- unregisterReceiver(sendReceiver);
- unregisterReceiver(deliveryReceiver);
- unregisterReceiver(smsReceiver);
- }
- private void sendSms() {
- String smsBody = "lab.sodino.sms.test" ;
- String smsAddress = "10086" ;
- SmsManager smsMag = SmsManager.getDefault();
- Intent sendIntent = new Intent(ACTION_SMS_SEND);
- PendingIntent sendPI = PendingIntent.getBroadcast(this , 0 , sendIntent,
- 0 );
- Intent deliveryIntent = new Intent(ACTION_SMS_DELIVERY);
- PendingIntent deliveryPI = PendingIntent.getBroadcast(this , 0 ,
- deliveryIntent, 0 );
- smsMag.sendTextMessage(smsAddress, null , smsBody, sendPI, deliveryPI);
- }
- public class SMSReceiver extends BroadcastReceiver {
- public void onReceive(Context context, Intent intent) {
- String actionName = intent.getAction();
- int resultCode = getResultCode();
- if (actionName.equals(ACTION_SMS_SEND)) {
- switch (resultCode) {
- case Activity.RESULT_OK:
- serviceCenterAddressText
- .append("\n[Send]SMS Send:Successed!" );
- break ;
- case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
- serviceCenterAddressText
- .append("\n[Send]SMS Send:RESULT_ERROR_GENERIC_FAILURE!" );
- break ;
- case SmsManager.RESULT_ERROR_NO_SERVICE:
- serviceCenterAddressText
- .append("\n[Send]SMS Send:RESULT_ERROR_NO_SERVICE!" );
- break ;
- case SmsManager.RESULT_ERROR_NULL_PDU:
- serviceCenterAddressText
- .append("\n[Send]SMS Send:RESULT_ERROR_NULL_PDU!" );
- break ;
- case SmsManager.RESULT_ERROR_RADIO_OFF:
- break ;
- }
- } else if (actionName.equals(ACTION_SMS_DELIVERY)) {
- switch (resultCode) {
- case Activity.RESULT_OK:
- serviceCenterAddressText
- .append("\n[Delivery]SMS Delivery:Successed!" );
- break ;
- case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
- serviceCenterAddressText
- .append("\n[Delivery]SMS Delivery:RESULT_ERROR_GENERIC_FAILURE!" );
- break ;
- case SmsManager.RESULT_ERROR_NO_SERVICE:
- serviceCenterAddressText
- .append("\n[Delivery]SMS Delivery:RESULT_ERROR_NO_SERVICE!" );
- break ;
- case SmsManager.RESULT_ERROR_NULL_PDU:
- serviceCenterAddressText
- .append("\n[Delivery]SMS Delivery:RESULT_ERROR_NULL_PDU!" );
- break ;
- case SmsManager.RESULT_ERROR_RADIO_OFF:
- serviceCenterAddressText
- .append("\n[Delivery]SMS Delivery:RESULT_ERROR_RADIO_OFF!" );
- break ;
- }
- serviceCenterAddressText.append("\n正在等待下行短信..." );
- } else if (actionName.equals(ACTION_SMS_RECEIVER)) {
- System.out.println("[Sodino]result = " + resultCode);
- Bundle bundle = intent.getExtras();
- if (bundle != null ) {
- Object[] myOBJpdus = (Object[]) bundle.get("pdus" );
- SmsMessage[] messages = new SmsMessage[myOBJpdus.length];
- for ( int i = 0 ; i < myOBJpdus.length; i++) {
- messages[i] = SmsMessage
- .createFromPdu((byte []) myOBJpdus[i]);
- }
- SmsMessage message = messages[0 ];
- serviceCenterAddressText.append("\n短信服务中心号码为:"
- + message.getServiceCenterAddress());
- }
- }
- }
- }
- }
最后要在AndroidManifest.xml中添加下面两个权限:
- < uses-permission android:name = "android.permission.SEND_SMS" > </ uses-permission >
-
<
uses-permission
android:name
=
"android.permission.RECEIVE_SMS"
>
</
uses-permission
>
发表评论
-
驾驭synchronize的方法
2011-02-25 14:11 2363刚看到时有一些不理解 ... -
事件处理
2011-01-04 15:58 791activity和VIEW都能接收触摸和按键,如果响应事件只需 ... -
Android onTouchEvent, onClick及onLongClick的调用机制
2011-01-04 15:40 1786针对屏幕上的一个View 控件,Android 如何区分应 ... -
android事件处理总结--dispatchTouchEvent
2011-01-04 15:39 2468从今天解决的一个问题了解到, viewGroup的dispat ... -
Android开发指南-用户界面-事件处理
2011-01-04 15:38 606处理用户界面事件 ... -
onInterceptTouchEvent和onTouchEvent调用时序
2011-01-04 15:35 779onInterceptTouchEvent()是ViewGro ...
相关推荐
String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)`: 这是发送文本短信的主要方法,参数包括目标电话号码、服务中心地址、短信内容、发送成功的PendingIntent以及送达状态的...
- `scAddress`:短信服务中心地址,通常设置为`null`以使用系统默认值。 - `content`:短信内容。 - `pendingIntent`:发送结果的意图,用于回调发送状态,例如成功、失败或取消。 - `sentIntent`:当短信被成功...
2. `scAddress`:服务中心号码,一般为空,系统会自动选择。 3. `text`:要发送的短信内容。 4. `sentIntent`:如果提供,当短信发送成功时,系统会回调这个Intent。 5. `deliveryIntent`:如果提供,当短信送达时,...
- **TelephonyManager**: 这是 Android SDK 提供的接口,用于获取与电话相关的各种信息,包括获取 SMS 服务。 - **SmsManager**: 是 Android 系统中用于处理 SMS 功能的主要类,提供发送短信、接收短信回调等功能...
- `scAddress`:服务中心号码(SMSC),通常在发送国内短信时可以为空。 - `text`:要发送的短信内容。 - `sentIntent`:一个PendingIntent,当短信发送成功或失败时,系统会通过这个Intent回调我们的应用。 ```...
总结,"SendSMS.zip"是一个简单的Android SMS发送应用示例,它展示了如何利用Android SDK中的`SmsManager`类发送短信并监听发送状态。开发者可以通过这个例子学习和理解Android短信服务的基本用法,并在此基础上进行...
在移动通信领域,手机短信(Short Message Service,SMS)是一种广泛使用的通信方式,它允许用户通过手机设备发送和接收简短的文字信息。本文将详细探讨“手机短信编程”这一主题,包括基本概念、工作原理以及如何...
在这个函数中,`sendTextMessage()`方法接受四个参数:收件人的电话号码、发送者的短信服务中心号码(通常为null,系统会自动填充)、要发送的消息文本、发送状态回调的PendingIntent(可选)以及送达状态回调的...
接着,手机通过无线电接口,通常是GSM、UMTS、LTE等移动通信网络,将这个数据包发送到短信服务中心(Short Message Service Center, SMSC)。 SMSC是短信系统的核心组件,负责存储、转发和路由短信。当接收到短信后...
- `scAddress`: 短信服务中心号码(Short Message Service Center),在大多数情况下,可以设置为null,因为系统会自动选择正确的SC。 - `text`: 要发送的短信内容,字符串类型。 - `sentIntent`: 一个Intent对象...
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通信,我们需要了解两个关键概念:PDU(Protocol Data Unit)和AT命令。PDU是SMS...
- **短信接收模块**:DEMO可能包含了一个接收短信的逻辑,这可能涉及监听短信消息中心(SMSC)的回调,或者在用户同意的情况下,通过权限获取系统接收到的短信。 3. **开发环境与集成** - 开发环境:DEMO可能是在...
5. **事件监听(BroadcastReceiver)**:为了跟踪短信的发送状态,我们可以创建一个`BroadcastReceiver`,注册对`ACTION_SMS_SENT`广播的监听。当短信发送成功或失败时,系统会发送这个广播,我们的接收器可以接收到...
SMS的传输基于GSM 03.40标准,其中规定了短消息服务中心(SMSC)与移动终端之间的交互。短信可以通过电路交换数据服务(CSD)或更常见的分组交换数据服务(GPRS/EDGE/3G/4G等)进行传输。短信的传输通常涉及到SMSC...
Telephony Service则负责与短信相关的操作,如发送短信、接收短信、设置短信中心号码等。 源码库中的关键组件可能包括以下几个部分: 1. **SMS Provider**: 这部分源码主要处理与数据库交互的逻辑,如添加新的短信...
它接受目标地址、服务中心地址、短信内容以及发送和送达意图。这个方法与`sendDataMessage()`类似,只是它专门用于发送纯文本格式的短信。 除了上述方法,`SmsManager`还定义了一些常量,如`RESULT_ERROR_GENERIC_...
【标题】"SMS.rar_sms" 指的是一款与短信相关的客户端软件的源代码,它包含了一套用于发送和接收短信的应用程序的编程资源。在IT行业中,源代码是程序员用编程语言编写的原始指令,它是软件的基础,通过源代码可以...