Android 实现直接打电话与直接发短信

  • 记录安卓实现直接打电话以及直接发短信以及相应的权限申请
  1. 相应的Action
    (1)String action = Intent.ACTION_DIAL;实现跳转到拨号界面
    (2)Intent intent = new Intent(Intent.ACTION_SENDTO);跳转到信息界面
    (3)String action = Intent.ACTION_CALL;直接拨打电话(需要权限)
<!--打电话的权限-->
    <uses-permission android:name="android.permission.CALL_PHONE"/>

(4)

/ *1.得到SmsManager对象
            * 2.发送文本信息
            * */
           SmsManager smsManager = SmsManager.getDefault();
           smsManager.sendTextMessage(et_num.getText().toString(),null,et_sms.getText().toString(),
                   null,null);//设置为空表示不关心回执

短信权限申请:

<!--发短信的权限-->
    <uses-permission android:name="android.permission.SEND_SMS"/>

记录权限申请的坑,有时明明在AndroidManifest文件中申请了权限在使用时仍然报错。原因是手机没有给授权相应的权限,需要在应用设置里手动授权。
在这里插入图片描述

记录整体代码:

public class MainActivity extends AppCompatActivity implements View.OnLongClickListener {

    private EditText et_num;
    private EditText et_sms;
    private Button bt_num;
    private Button bt_sms;
    private View.OnClickListener onClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //点击事件
            if (v == bt_num) {
                //隐式启动
                //拨号界面的action,传入Intent中
                /*String action = "android.intent.action.DIAL";*/
                String action = Intent.ACTION_DIAL;
                Intent intent = new Intent(action);
                //携带数据
                String number = et_num.getText().toString();
                intent.setData(Uri.parse("tel:" + number));
                //start
                startActivity(intent);
            } else if (v == bt_sms) {
               /*
               点击发短信进入短信编辑的界面(隐式)
               * */
                Intent intent = new Intent(Intent.ACTION_SENDTO);
                intent.setData(Uri.parse("smsto:" + et_num.getText().toString()))
                .putExtra("sms_body", et_sms.getText().toString());
                startActivity(intent);
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_num = (EditText) findViewById(R.id.et_num);
        et_sms = (EditText) findViewById(R.id.et_sms);
        bt_num = (Button) findViewById(R.id.bt_num);
        bt_sms = (Button) findViewById(R.id.bt_sms);

        //跳转到拨号界面(隐式启动)
        bt_num.setOnClickListener(onClickListener);
        bt_sms.setOnClickListener(onClickListener);
        //直接打电话
        bt_num.setOnLongClickListener(this);
        bt_sms.setOnLongClickListener(this);

    }

    @Override
    public boolean onLongClick(View v) {
        //长按
        if (v == bt_num) {
            //长按直接拨打电话
            //需要申请权限
            String action = Intent.ACTION_CALL;
            Intent intent = new Intent(action);
            //携带数据
            String number = et_num.getText().toString();
            intent.setData(Uri.parse("tel:" + number));
            //start
            startActivity(intent);
        } else if (v == bt_sms) {
            /*长按直接发送短信
             *1.得到SmsManager对象
             * 2.发送文本信息
             * */
            SmsManager smsManager = SmsManager.getDefault();
            smsManager.sendTextMessage(et_num.getText().toString(),null,et_sms.getText().toString(),
                    null,null);//设置为空表示不关心回执
        }
        return false;
    }
}

这是一个自己开发的Android 直接发送短信方法附上代码,Android 发短信功能,包括了对内容合法性的验证,发送完成弹出提示。自己开发的直接发送短信的方法:   private void sendSMS(String telNo,String smsStr,View v){    PendingIntent pi=    PendingIntent.getActivity(this, 0, new Intent(this,Sample_11_1.class), 0);    SmsManager sms=SmsManager.getDefault();    sms.sendTextMessage(telNo, null, smsStr, pi, null);    //短信发送成功给予提示    Toast.makeText(    Sample_11_1.this, //上下文    "恭喜你,短信发送成功!", //提示内容    5000 //信息显示时间    ).show();    v.setEnabled(true);//短信发送完成后恢复发送按钮的可用状态   }   对手机号码和短信内容的验证部分:   //获取输入的电话号码   EditText etTel=(EditText)findViewById(R.id.EditText02);   String telStr=etTel.getText().toString();   //获取输入的短信内容   EditText etSms=(EditText)findViewById(R.id.EditText01);   String smsStr=etSms.getText().toString();   //判断号码字符串是否合法   if(PhoneNumberUtils.isGlobalPhoneNumber(telStr)){//合法则发送短信    v.setEnabled(false);//短信发送完成前将发送按钮设置为不可用    sendSMS(telStr,smsStr,v);   }   else{//不合法则提示    Toast.makeText(    Sample_11_1.this, //上下文    "电话号码不符合格式!!!", //提示内容    5000//信息显示时间    ).show();   }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YonChao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值