您的位置:首页 > 其它

接收和发送短信

2016-07-13 16:01 155 查看
package com.gao.smstest;

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.support.v7.app.AppCompatActivity;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

/**
* 接收和发送短信
*/
public class MainActivity extends AppCompatActivity {
private TextView sender;
private TextView content;
private MessageReceiver mMessageReceiver;
private IntentFilter mIntentFilter;

private IntentFilter sendFilter;
private SendStatusReceiver sendStatusReceiver;

private EditText to;
private EditText msgInput;
private Button send;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

sender = (TextView) findViewById(R.id.sender);
content = (TextView) findViewById(R.id.content);

to = (EditText) findViewById(R.id.to);
msgInput = (EditText) findViewById(R.id.msg_input);
send = (Button) findViewById(R.id.send);
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SmsManager smsManager = SmsManager.getDefault();

//发送短信
smsManager.sendTextMessage(to.getText().toString(), null, msgInput.getText().toString(), null, null);
}
});

sendFilter = new IntentFilter();
sendFilter.addAction("SENT_SMS_ACTION");
sendStatusReceiver = new SendStatusReceiver();
registerReceiver(sendStatusReceiver, sendFilter);
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SmsManager smsManager = SmsManager.getDefault();
Intent sentIntent = new Intent("SENT_SMS_ACTION");
PendingIntent pi = PendingIntent.getBroadcast
(MainActivity.this, 0, sentIntent, 0);
smsManager.sendTextMessage(to.getText().toString(), null,
msgInput.getText().toString(), pi, null);
}
});
//动态注册广播
mIntentFilter = new IntentFilter();
mIntentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
mMessageReceiver = new MessageReceiver();
registerReceiver(mMessageReceiver, mIntentFilter);
}

@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(mMessageReceiver); //取消注册 广播
}

//    创建一个广播接收器来接收系统发出的短信广播
class MessageReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
/**
* pdu为承载着一条短信的所有短信。
* 一条短信为140个英文字符长度,在这个长度范围内,
* 即需一个pdu即可。超出这个范围,即要分割成多个pdu数组。
*/
//提取短消息
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < messages.length; i++) {
//使用 SmsMessage 的createFromPdu()方法将每一个 pdu 字节数组转换为 SmsMessage 对象
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
//  获取发送方号码
String address = messages[0].getOriginatingAddress();

//获取短信内容
String fullMessage = "";
for (SmsMessage smsMessage : messages) {
fullMessage += smsMessage.getMessageBody(); //获取短信内容
}
sender.setText(address);
content.setText(fullMessage);

abortBroadcast(); //中断向下发送短信息
}
}

private class SendStatusReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if (getResultCode() == RESULT_OK) {
//  短信发送成功
Toast.makeText(context, "Send succeeded",
Toast.LENGTH_LONG).show();
} else {
//  短信发送失败
Toast.makeText(context, "Send failed",
Toast.LENGTH_LONG).show();
}
}
}

/**
* 每条短信的长度不得超过 140 个字符,如果想要发送超出这个长度的短信,
* 则需要将这条短信分割成多条短信来发送,使用 SmsManager的 sendMultipart-TextMessage()方法就可以实现上述功能。
* 它的用法和 sendTextMessage()方法也基本类似
*/
}


布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.gao.smstest.MainActivity">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="48dp"
android:orientation="horizontal">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:padding="10dp"
android:text="From: "/>

<TextView
android:id="@+id/sender"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"/>
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="48dp"
android:orientation="horizontal">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:padding="10dp"
android:text="Content: "/>

<TextView
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"/>
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:padding="10dp"
android:text="To:"/>
<!--用于输入接收方的手机号码-->
<EditText
android:id="@+id/to"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"/>
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp">
<!--一个 EditText 和一个 Button,
分别用于输入短信内容和发送短信-->
<EditText
android:id="@+id/msg_input"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"/>

<Button
android:id="@+id/send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="Send"/>
</LinearLayout>

</LinearLayout>


在清单文件中的权限

<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  短信