android 几种发送短信的方法

android中发送短信很简单,

首先要在Mainfest.xml中加入所需要的权限:

?


1

2

3

<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>

<uses-permission android:name="android.permission.READ_SMS"></uses-permission>

<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>

为了后面测试方便,干脆把SMS的所有权限加上。

方法1:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

public class testSms extends Activity {

...

    private void send1(String phone, String message){

        PendingIntent pi = PendingIntent.getActivity(this, 0, new Intent(this, testSms.class), 0);

        SmsManager sms = SmsManager.getDefault();

        sms.sendTextMessage(phone, null, message, pi, null);

    }

}

方法2:

如果想知道短信发送后的状态,需要两个Receiver来实现

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

private void send2(String number, String message){

    String SENT = "sms_sent";

    String DELIVERED = "sms_delivered";

   

    PendingIntent sentPI = PendingIntent.getActivity(this, 0, new Intent(SENT), 0);

    PendingIntent deliveredPI = PendingIntent.getActivity(this, 0, new Intent(DELIVERED), 0);

   

    registerReceiver(new BroadcastReceiver(){

            @Override

            public void onReceive(Context context, Intent intent) {

                switch(getResultCode())

                {

                    case Activity.RESULT_OK:

                        Log.i("====>", "Activity.RESULT_OK");

                        break;

                    case SmsManager.RESULT_ERROR_GENERIC_FAILURE:

                        Log.i("====>", "RESULT_ERROR_GENERIC_FAILURE");

                        break;

                    case SmsManager.RESULT_ERROR_NO_SERVICE:

                        Log.i("====>", "RESULT_ERROR_NO_SERVICE");

                        break;

                    case SmsManager.RESULT_ERROR_NULL_PDU:

                        Log.i("====>", "RESULT_ERROR_NULL_PDU");

                        break;

                    case SmsManager.RESULT_ERROR_RADIO_OFF:

                        Log.i("====>", "RESULT_ERROR_RADIO_OFF");

                        break;

                }

            }

    }, new IntentFilter(SENT));

   

    registerReceiver(new BroadcastReceiver(){

        @Override

        public void onReceive(Context context, Intent intent){

            switch(getResultCode())

            {

                case Activity.RESULT_OK:

                    Log.i("====>", "RESULT_OK");

                    break;

                case Activity.RESULT_CANCELED:

                    Log.i("=====>", "RESULT_CANCELED");

                    break;

            }

        }

    }, new IntentFilter(DELIVERED));

   

        SmsManager smsm = SmsManager.getDefault();

        smsm.sendTextMessage(number, null, message, sentPI, deliveredPI);

}

在模拟器上是看不到Receiver中的log信息的,据网上说在手机上是可以实现的,只可惜手中无机,也只能纸上谈兵了。

方法3:

上面都是发送文本文件,如果想发送一些非文本,比如加密数据,可以用以下方法:

?


1

2

3

4

5

6

private void send2(String number, String message){

    SmsManager smsm = SmsManager.getDefault();

    short port = 1000;

    PendingIntent pi = PendingIntent.getBroadcast(test.this, 0, new Intent(), 0);

    smsm.sendDataMessage(number, null, port, message.getBytes(), pi, null);

}

方法4:

调用系统的短信界面,这个方法需要用户自己输入接收方的电话号码

?


1

2

3

4

5

private void send(String message){

    Intent sendIntent = new Intent(Intent.ACTION_VIEW);

    sendIntent.putExtra("sms_body", message);

    sendIntent.setType("vnd.android-dir/mms-sms");

}

这个方法自动设置接收方的号码

?


1

2

3

4

5

6

private void send1(String number, String message){

    Uri uri = Uri.parse("smsto:" + number);

    Intent sendIntent = new Intent(Intent.ACTION_VIEW, uri);

    sendIntent.putExtra("sms_body", message);

    startActivity(sendIntent);

}

短信的接受,需要实现BroadcastReceiver类,监听系统消息

首先在Mainfest.xml中加入申明,SmsReceiver为实现类

?


1

2

3

4

5

6

7

<receiver android:name=".SmsReceiver">

<intent-filter>

    <action android:name="android.provider.Telephony.SMS_RECEIVED" />

</intent-filter>

</receiver>

如果是方法3,使用sendDataMessage时需要加入

?


1

2

3

4

5

6

7

8

9

10

<receiver android:name=".SmsReceiver">

<intent-filter>

    <action android:name="android.intent.action.DATA_SMS_RECEIVED" />

    <data android:scheme="sms" />

    <data android:host="localhost" />

    <data android:port="1000" />

</intent-filter>

</receiver>

将其中的dat数据注释掉,模拟器上也可以接收到短信; port跟sendDataMessage中的端口值不一致时,也没有问题,太神奇了

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

public class SmsReceiver extends BroadcastReceiver {

    @Override

    public void onReceive(Context context, Intent intent) {

        Bundle bundle = intent.getExtras();

        SmsMessage[] msgs = null;

        String phone;

        String message;

               

        if(bundle != null){

            Object[] pdus = (Object[])bundle.get("pdus");

            msgs = new SmsMessage[pdus.length];

            for(int i = 0; i < msgs.length; i++){

                msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);

                phone = msgs[i].getOriginatingAddress();

                message = msgs[i].getMessageBody();

            }

        }

    }

}

如果是sendDataMessage发送:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

public class SmsReceiver extends BroadcastReceiver {

    @Override

    public void onReceive(Context context, Intent intent) {

        Bundle bundle = intent.getExtras();

        SmsMessage[] msgs = null;

             String phone;

             String message;

               

        if(bundle != null){

            Object[] pdus = (Object[])bundle.get("pdus");

            msgs = new SmsMessage[pdus.length];

            for(int i = 0; i < msgs.length; i++){

                msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);

                phone = msgs[i].getOriginatingAddress();

                byte data[] = SmsMessage.createFromPdu((byte[])pdus[i]).getUserData();

                message = new String(data);

            }

        }

    }

}

不一样的地方是message的获取时使用getUserData()方法。

原文转自:http://blog.csdn.net/rangq1/article/details/5793953

时间: 2024-08-02 20:57:10

android 几种发送短信的方法的相关文章

android 几种发送短信的方法【转】

android中发送短信很简单, 首先要在Mainfest.xml中加入所需要的权限: <uses-permission android:name="android.permission.SEND_SMS"></uses-permission> <uses-permission android:name="android.permission.READ_SMS"></uses-permission> <uses-

java 短信猫发送短信的方法

用java实现短信收发的功能,目前一般项目中短信群发功能的实现方法大致有下面三种: ·                 1. 向运行商申请短信网关,不需要额外的设备,利用运行商提供的API调用程序发送短信,适用于大型的通信公司. ·                 2. 借助像GSM MODEM之类的设备(支持AT指令的手机也行),通过数据线连接电脑来发送短信,这种方法比较适用于小公司及个人.要实现这种方式必须理解串口通信.AT指令.短信编码.解码. ·                 3. 借

Android接收和发送短信

每一部手机都具有短信接收和发送功能,下面我们通过代码来实现接收和发送短信功能. 一.接收短信 1.创建内部广播接收器类,接收系统发出的短信广播 2.从获得的内容中解析出短信发送者和短信内容 3.在Activity中注册广播 4.添加接收短信权限 下面放上具体的代码 activity_main.xml文件用于显示短信发送者号码和显示短信内容 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout

android: 接收和发送短信

8.2    接收和发送短信 收发短信应该是每个手机最基本的功能之一了,即使是许多年前的老手机也都会具备这 项功能,而 Android 作为出色的智能手机操作系统,自然也少不了在这方面的支持.每个 Android 手机都会内置一个短信应用程序,使用它就可以轻松地完成收发短信的操作,如 图 8.4 所示. 图   8.4 不过作为一名开发者,仅仅满足于此显然是不够的.你要知道,Android 还提供了一系 列的 API,使得我们甚至可以在自己的应用程序里接收和发送短信.也就是说,只要你有足 够的信

Android开发之发送短信

本实例通过SmsManager的sendTextMessage方法实现发送短信关于SmsManager的详解大家可以参照:Android开发之SmsManager详解 实例运行效果图: 实例分析: 上面的程序用到了一个PendingIntent对象,PendingIntent是对Intent的包装,表示即将发生的意图,主要用在:通知Notificatio的发送,短消息SmsManager的发送和警报器AlarmManager的执行等等.一般通过调用PendingIntent的 getActivi

Android获取最新发送短信的基本信息,没有之一

注册: getContentResolver().registerContentObserver(                Uri.parse("content://sms"), true,                new SmsObserver(this, new Handler())); 监听: //用于检测发出的短信    public class SmsObserver extends ContentObserver {        private Context

Android NDK之发送短信

java代码: MainActivity Activity [email protected]     onCreateBundle savedInstanceStateonCreatesavedInstanceStatesetContentViewRlayoutactivity_mainsendTextMessagesendMessageObject handlerString whoNumberString messagesendTextMessageObject handlerString

【Android】Android 发送短信和打电话的方法

发送短信的方法 有两种方法可以实现发送短信,其一是使用intent-startActivity,URI数据格式为"smsto:num",调用的action为Intent.ACTION_SENDTO: Uri uri = Uri.parse("smsto:5554"); Intent it = new Intent(Intent.ACTION_SENDTO, uri); it.putExtra("sms_body", "你好.."

Android之发送短信的两种方式

第一:调用系统短信接口直接发送短信:主要代码如下:  /** * 直接调用短信接口发短信 * * @param phoneNumber * @param message */ public void sendSMS(String phoneNumber, String message) { // 获取短信管理器 android.telephony.SmsManager smsManager = android.telephony.SmsManager .getDefault(); // 拆分短信