0
点赞
收藏
分享

微信扫一扫

【达内课程】Android中短信相关操作

【达内课程】Android中短信相关操作_数据库
发送短信

【达内课程】Android中短信相关操作_短信_02
发短信关键代码

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" />

测试一下【达内课程】Android中短信相关操作_短信_03
这种用代码发送的短信,是不会进入到短消息数据库的
没有对数据库进行任何操作

现在我们做一个功能,当短信发送成功,或失败,Toast下
【达内课程】Android中短信相关操作_ide_04
主要代码如下,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;
}
}
}
}
}

长短信

【达内课程】Android中短信相关操作_ide_05

使用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);
}

拦截短信

数据库读取短信

【达内课程】Android中短信相关操作_短信_06

/data/data/com.android.providers.Telephoney/databases/

可以参考以下文章​


举报

相关推荐

0 条评论