短信的接收,短信的发送

发送短信的几种方式:

第一种:直接发送一个隐式意图,访问android中自带的发送短消息

//1发送一个隐式意图用模拟器发送短消息
       Intent intent = new Intent(Intent.ACTION_SENDTO);
       Uri data = Uri.parse("smsto:"+"手机号码");
        intent.setData(data);
       intent.putExtra("sms_body", "短信内容");
        startActivity(intent);
    //2发送一个隐式意图用模拟器的发送短消息
       Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setType("vnd.android-dir/mms-sms");
        intent.putExtra("address", "手机号码");
       intent.putExtra("sms_body", "短信内容");
       startActivity(intent);
第二种:用Java代码来实现
Intent intent = new Intent("com.tarena.SENT");
PendingIntent p1 = PendingIntent.getBroadcast(this, 0, intent, 0);
Intent intent2 = new Intent("com.tarena.DELIVERY");
PendingIntent p2 = PendingIntent.getBroadcast(this, 0, intent2, 0);

        SmsManager manager = SmsManager.getDefault();
        manager.sendTextMessage(
                "15555215556",
                null,
                etSms.getText().toString(),
                p1,
                p2);

注解:sendTextMessage方法的几个参数分别是:

1)destinationAddress:目标地址

2)scAddress :相当于哪个移动基站的地址,好像是一直没有启用这个参数,所以一般给Null

3)text :发送的短信内容

//发送短信一般是先发送到运营商的基站,如果基站收到了,会用到了第四个参数

//发送一个延迟广播,来发送状态。

4)sentIntent :发送状态:成功收到我发的信息

//发送短信到运营商的基站,在由基站发送到目标地址,如果目标地址收到了,会用到第五个参数,

//发送一个延迟广播,来发送我收到的状态,但是这个广播会不会发送,一般取决于你运营商会不会发

//模拟器上,这个参数是没有用的;

5)deliveryIntent :接收状态:成功接收到我发的信息

注意:利用代码直接发送短信,有两点问题要注意

1)申请权限 SEND_SMS;

2)利用代码发送短信,短信是不会被系统写入数据表;

解决办法:

要插入的具体数据根据自己的需求来决定:

ContentValues values = new ContentValues();
        values.put("date", date);
        values.put("body", body);
        values.put("address", number);
        values.put("thread_id", thread_id);
        values.put("person", 0);
        values.put("type", 2);

        context.getContentResolver().insert(Uri.parse("content://sms/sent"), values);

短信接收:

安卓系统后台有一个服务(Service),专门用来接收短消息,当有新的消息到达时,Service会发送一个广播广播的Action是:”android.provider.Telephony.SMS_RECEIVED”。并且将收到短消息作为广播Intent的 一部分(Intent的Extra)发送出去。

短信接收的一个简单的实例:

注册一个广播:

    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        myReciever = new MyReciever();
        IntentFilter filter = new IntentFilter();
        filter.addAction("android.provider.Telephony.SMS_RECEIVED");
        filter.setPriority(1001);
        registerReceiver(myReciever, filter);

    }

创建一个广播接收者:

public class MyReciever extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            String action = intent.getAction();

            ("android.provider.Telephony.SMS_RECEIVED".equals(action)) {
                Bundle bundle = intent.getExtras();
                Object [] pdus = (Object[]) bundle.get("pdus");
                StringBuilder builder = new StringBuilder();
                String  number = "";
                //把拼接pdus数组里面的数据
                for (int i = 0; i < pdus.length; i++) {
                    SmsMessage message = SmsMessage.createFromPdu((byte[]) pdus[i]);
                    //短信内容
                    builder.append(message.getDisplayMessageBody());
                    //电话号码
                    number = message.getDisplayOriginatingAddress();
                }

                //拦截短信,不让系统接收到,
                abortBroadcast();
            }

        }

    }

解除注册:

@Override
    protected void onPause() {
        // 解除广播注册
        super.onPause();
        unregisterReceiver(myReciever);
    }

咱们的程序如果想收到短信息:

1)注册广播接收器,接收android.provider.Telephony.SMS_RECEIVED广播

2)必须设定权限 RECEIVE_SMS:

3) 设定较高的优先级 (1000左右)

4)如果不希望系统的短信程序接收短信,就执行abortBroadcast,广播停止下发

问题:如果系统短信接收程序收不到短信了,那么这条短信也不会被写入数据库,自己往数据表中插入就可以了:

Values的值自己来决定:

context.getContentResolver().insert(Uri.parse("content://sms/inbox"), values);

我也是自己找到的办法,有更好的解决方案。还望多多提提意见!!

时间: 2024-10-10 04:45:32

短信的接收,短信的发送的相关文章

Android 发送短信与接收短信

package com.example.testsms; 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.o

Android软件开发之发送短信与系统短信库解析

今天我和同学们讨论一下Android平台下如何调用系统方法发送短信.接收短信.系统的短信库相关的问题.进入正题,我们先使用Eclipse工具模拟给自己的模拟器发送一条短信.在Eclipse下打开DDMS Incoming number: 这里须要填写的是发件人的手机号码,这里只能输入数字否则会无法发送. Message: 这里为发送的内容send: 上面两项都填写完毕点击发送键可以给模拟器发送短信. <ignore_js_op> 点击发送后,模拟器中就可以看到自己收到了一条消息 发件人的号码为

通过RS232发送和接收短信(一)

通常,发送和接收短信的终端都是通过串行接口连接电脑,这类设备用得比较多的是GSM Modem和手机.这类设备通常都支持PDU模式,但仍有少数设备只支持Text模式. 设备硬件连接好以后可以通过发送AT指令测试设备是否连接正确能否正常通讯.在这里我使用Windows自带的"超级终端"工具进行通讯.此工具可以在程序--附件--通讯里面找到,如果没有请确认是否安装了此组件.或者在运行里面输入"hypertrm"也可以快速启动"超级终端". 以下所有范例

android基础----&gt;发送和接收短信

收发短信应该是每个手机最基本的功能之一了,即使是许多年前的老手机也都会具备这项功能,而Android 作为出色的智能手机操作系统,自然也少不了在这方面的支持.今天我们开始自己创建一个简单的发送和接收短信的应用. 目录导航 接收短信 发送短信 友情链接 接收短信 项目的结构如下:一个简单的接收和发送短信的功能 一.定义一个接收短信的广播:当手机接收到一条短信的时候,系统会发出一条值为android.provider.Telephony.SMS_RECEIVED 的广播,这条广播里携带着与短信相关的

发送与接收短信

权限: <uses-permission android:name="android.permission.READ_SMS"></uses-permission> < uses-permission android:name="android.permission.SEND_SMS"></uses-permission> 发送短信: 1. 获得默认的消息管理器 2. 通过sendTextMessage发送短信. Sm

Android之发送短信和接收验证码

最近项目需求需要发送短信和接收验证码并将验证码显示在输入框中 以下是我的记录 前提---权限 <uses-permission android:name="android.permission.SEND_SMS"></uses-permission> <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> <

android短信的接收和发送处理

一 初始化 手机开机初始化调用GSMPhone 构造函数. GSMPhone (Context context, CommandsInterface ci, PhoneNotifier notifier, boolean unitTestMode) 创建 mSMS = new GsmSMSDispatcher(this); 该类继承于SMSDispatcher.类SMSDispatcher中构造函数中初始化了 短信的消息 mCm.setOnNewSMS(this, EVENT_NEW_SMS,

通过RS232发送和接收短信(三)

接收短信 接收刚收到的短信有两种方法:轮询终端:使用事件 轮询终端可以定期的使用AT+CMGL=0指令读取未读取得指令.方法简单,但许多时候都在做无用功,效率低下,一般不建议采用.下面主要讲解事件法: 指令: AT+CNMI=<mode>,<mt>,<bm>,<ds>,<brf> 参数: mode: 0--缓存在终端 1--直接发送到TE mt: 0--接收到新的SMS不返回事件 1--如果接收到的SMS存储在ME,则返回 +CMTI:<m

手机安全卫士------手机防盗页面之发送短信&amp;接收短信

功能需求: 接上一篇文章,如果sim卡变更,则发送一条报警短信给安全号码 接收从安全号码发来的短信,如果内容为报警指令,则根据相应的报警指令做出相应的操作 发送短信 1.创建一个SmsManager对象 SmsManager manager = SmsManager.getDefault(); 2.通过SharedPreferences获取安全号码 String number 3.创建短信内容: content 4.分割短信: 由于每条短信只能70个字,所以我们要把它分割一下:manager.d