Android发送接收短信

【关键在于实践,没有成套的代码,只有核心的重要点】

【核心代码】

package com.example.demo;
 
import android.Manifest;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
 
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
 
import java.util.List;
 
/**
 * 发送短信Demo
 * @description:
 * @author ldm
 * @date 2016-4-22 上午9:07:53
 */
public class SmsActivity extends Activity implements View.OnClickListener {
    public static final String SMS_RECIPIENT_EXTRA = "com.example.demo.SMS_RECIPIENT";
    public static final String ACTION_SMS_SENT = "com.example.demo.SMS_SENT_ACTION";
    private Button sms_send_message;
    private EditText sms_recipient;
    private EditText sms_content;
    private CheckBox sms_enable_receiver;
    private TextView sms_status;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.SEND_SMS} , 1);
        setContentView(R.layout.send_sms_layout);
        initViews();
        initListeners();
        registerSmsReceiver();
 
    }
 
    /**
     * 注冊短信监听广播
     *
     * @description:
     * @author ldm
     * @date 2016-4-22 上午9:23:23
     */
    private void registerSmsReceiver() {
        registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String message = "null";
                boolean error = true;
                switch (-1) {
                    case Activity.RESULT_OK:
                        message = "发送成功!";
                        error = false;
                        break;
                    case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                        message = "发送失败";
                        break;
                    case SmsManager.RESULT_ERROR_NO_SERVICE:
                        message = "发送失败";
                        break;
                    case SmsManager.RESULT_ERROR_NULL_PDU:
                        message = "发送失败";
                        break;
                    case SmsManager.RESULT_ERROR_RADIO_OFF:
                        message = "发送失败";
                        break;
                }
 
                sms_recipient.setEnabled(true);
                sms_content.setEnabled(true);
                sms_content.setText("");
 
                sms_status.setText(message);
                sms_status.setTextColor(error ? Color.RED : Color.GREEN);
            }
        }, new IntentFilter(ACTION_SMS_SENT));
    }
 
    /**
     * 监听事件
     *
     * @description:
     * @author ldm
     * @date 2016-4-22 上午9:24:20
     */
    private void initListeners() {
        sms_send_message.setOnClickListener(this);
        // 应用Package管理器
        final PackageManager pm = this.getPackageManager();
        // 获取到应用中指定的组件
        final ComponentName componentName = new ComponentName("com.example.demo","com.example.demo.MyMsmReceiver");
        // 依据组件是否可用的状态来推断sms_enable_receiver的选中状态
        sms_enable_receiver
                .setChecked(pm.getComponentEnabledSetting(componentName) == PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
        // 监听sms_enable_receiver设置广播组件是否可用
        sms_enable_receiver
                .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    public void onCheckedChanged(CompoundButton buttonView,
                                                 boolean isChecked) {
                        // 组件状态设置
                        pm.setComponentEnabledSetting(
                                componentName,
                                isChecked ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
                                        : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                                PackageManager.DONT_KILL_APP);
                    }
                });
 
    }
 
    private void initViews() {
        sms_recipient = (EditText) (findViewById(R.id.sms_recipient));
        sms_content = ((EditText) findViewById(R.id.sms_content));
        // 是否打开短信广播接收开关
        sms_enable_receiver = (CheckBox) findViewById(R.id.sms_enable_receiver);
        sms_send_message = (Button) findViewById(R.id.sms_send_message);
        sms_status = (TextView) findViewById(R.id.sms_status);
        if (getIntent().hasExtra(SMS_RECIPIENT_EXTRA)) {
            sms_recipient.setText(getIntent().getExtras().getString(
                    SMS_RECIPIENT_EXTRA));
            sms_content.requestFocus();
        }
    }
 
    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.sms_send_message) {
            sendSms();
        }
    }
 
    /**
     * 发送短信
     *
     * @description:
     * @author ldm
     * @date 2016-4-22 上午9:30:38
     */
    private void sendSms() {
 
        if (TextUtils.isEmpty(sms_recipient.getText())) {
            Toast.makeText(SmsActivity.this, "请输入短信接收者", Toast.LENGTH_SHORT)
                    .show();
            return;
        }
 
        if (TextUtils.isEmpty(sms_content.getText())) {
            Toast.makeText(SmsActivity.this, "请输入短信内容", Toast.LENGTH_SHORT)
                    .show();
            return;
        }
 
        sms_recipient.setEnabled(false);
        sms_content.setEnabled(false);
 
        SmsManager sms = SmsManager.getDefault();
 
        List<String> messages = sms.divideMessage(sms_recipient.getText()
                .toString());
 
        String recipient = sms_content.getText().toString();
        for (String message : messages) {
            // 发送短信
            sms.sendTextMessage(recipient, null, message, PendingIntent
                    .getBroadcast(SmsActivity.this, 0, new Intent(
                            ACTION_SMS_SENT), 0), null);
        }
 
    }
}

--------------------------------------------------------------------------------------------------------------------------------------------------欢迎光临,期待您的下次光临!

原文地址:https://www.cnblogs.com/varchar-pig/p/14223774.html