发送短信
发短信关键代码
SmsManager smsManager = SmsManager.getDefault();
String number = et_phone_number.getText().toString();
String text = et_sms_content.getText().toString();
smsManager.sendTextMessage(number,null,text,null,null);
AndroidManifest.xml中增加权限
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
测试一下
这种用代码发送的短信,是不会进入到短消息数据库的
没有对数据库进行任何操作
现在我们做一个功能,当短信发送成功,或失败,Toast下
主要代码如下,xml代码请自行脑补
public class SmsActivity extends Activity implements View.OnClickListener {
private static final String ACTION_SEND_SMS_OK_OR_NOT = "ACTION_SEND_SMS_OK_OR_NOT";
private static final String ACTION_RECEIVE_SMS_OK_OR_NOT = "ACTION_RECEIVE_SMS_OK_OR_NOT";
private Button btn_send;
private EditText et_phone_number;
private EditText et_sms_content;
private SmsStateReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sms);
initViews();
setListeners();
//注册广播接收器
receiver = new SmsStateReceiver();
IntentFilter filter = new IntentFilter(ACTION_SEND_SMS_OK_OR_NOT);
this.registerReceiver(receiver,filter);
}
@Override
protected void onDestroy() {
this.unregisterReceiver(receiver);
super.onDestroy();
}
private void setListeners() {
btn_send.setOnClickListener(this);
}
private void initViews() {
btn_send = findViewById(R.id.btn_send);
et_phone_number = findViewById(R.id.et_phone_number);
et_sms_content = findViewById(R.id.et_sms_content);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.btn_send:
sendSms();
break;
}
}
private void sendSms() {
SmsManager smsManager = SmsManager.getDefault();
String number = et_phone_number.getText().toString();
String text = et_sms_content.getText().toString();
//提示用户短信是否发送成功
Intent i1 = new Intent(ACTION_SEND_SMS_OK_OR_NOT);
PendingIntent p1 = PendingIntent.getBroadcast(this,0,i1,PendingIntent.FLAG_UPDATE_CURRENT);
//提示对方是否成功接收短信
Intent i2 = new Intent(ACTION_RECEIVE_SMS_OK_OR_NOT);
PendingIntent p2 = PendingIntent.getBroadcast(this,0,i2,PendingIntent.FLAG_UPDATE_CURRENT);
smsManager.sendTextMessage(number,null,text,p1,p2);
}
/**
* 短信收发状态的广播接收器
*/
class SmsStateReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
int code = getResultCode();//结果码
String action = intent.getAction();
if(ACTION_SEND_SMS_OK_OR_NOT.equals(action)){
switch (code){
case Activity.RESULT_OK://成功发送
Toast.makeText(SmsActivity.this,"发送成功",Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
case SmsManager.RESULT_ERROR_NO_SERVICE:
case SmsManager.RESULT_ERROR_NULL_PDU:
case SmsManager.RESULT_ERROR_RADIO_OFF:
Toast.makeText(SmsActivity.this,"发送失败",Toast.LENGTH_SHORT).show();
break;
}
}else if(ACTION_RECEIVE_SMS_OK_OR_NOT.equals(action)){
//提示是否接收成功
switch (code){
case Activity.RESULT_OK://成功发送
Toast.makeText(SmsActivity.this,"对方已成功接收",Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
case SmsManager.RESULT_ERROR_NO_SERVICE:
case SmsManager.RESULT_ERROR_NULL_PDU:
case SmsManager.RESULT_ERROR_RADIO_OFF:
Toast.makeText(SmsActivity.this,"对方接收失败",Toast.LENGTH_SHORT).show();
break;
}
}
}
}
}
长短信
使用sendTextMessage发送短信会有70字限制,超过70个字,就会发送不成功
关键代码如下,在之前的基础上修改:
......
//提示对方是否成功接收短信
Intent i2 = new Intent(ACTION_RECEIVE_SMS_OK_OR_NOT);
PendingIntent p2 = PendingIntent.getBroadcast(this,0,i2,PendingIntent.FLAG_UPDATE_CURRENT);
//处理大文本短信
ArrayList<String> bodies = smsManager.divideMessage(text);
for(String body:bodies){
smsManager.sendTextMessage(number,null,body,p1,p2);
}
拦截短信
https://blog.csdn.net/u010356768/article/details/87253174
数据库读取短信
/data/data/com.android.providers.Telephoney/databases/
可以参考以下文章
https://blog.csdn.net/u010356768/article/details/87456426