利用Intent 发送短信和打电话

发短信

参数的意义:
– destinationAddress:目标电话号码
– scAddress:短信中心号码,测试可以不填
– text: 短信内容
– sentIntent:发送 -->中国移动 --> 中国移动发送失败 --> 返回发送成功或失败信号 --> 后续处理 即,这个意图包装了短信发送状态的信息
– deliveryIntent: 发送 -->中国移动 --> 中国移动发送成功 --> 返回对方是否收到这个信息 --> 后续处理 即:这个意图包装了短信是否被对方收到的状态信息(供应商已经发送成功,但是对方没有收到)。

 SmsManager sms = SmsManager.getDefault();
 sms.sendTextMessage("156*******9", null, "nihao", sentPI, null);//发送普通文本信息
 
 //short port = 1000;
 //sms.sendDataMessage("156*******9", null, port, null, null, null);//发送一些非文本,比如加密数据

   /**
     * 直接调用短信接口发短信
     *
     * @param phoneNumber
     * @param message
     */
    public void sendSMS(String phoneNumber, String message) {
        //获取短信管理器
        android.telephony.SmsManager smsManager = android.telephony.SmsManager.getDefault();
        //拆分短信内容(手机短信长度限制)
        List<String> divideContents = smsManager.divideMessage(message);
        /*for (String text : divideContents) {
            System.out.println("MainActivity.sendSMS text=" + divideContents.get(0));
            // smsManager.sendTextMessage(phoneNumber, null, text, sentPI, deliverPI);
        }*/

        System.out.println("MainActivity.sendSMS" + divideContents.size());
        for (int i = 0; i < divideContents.size(); i++) {
            System.out.println("MainActivity.sendSMS text=" + divideContents.get(i));

        }

    }
///调用系统的短信界面,这个方法自动设置接收方的号码 ,经测试可以
    private void send1(String number, String message) {
        Uri uri = Uri.parse("smsto:" + number);
        Intent sendIntent = new Intent(Intent.ACTION_VIEW, uri);
        sendIntent.putExtra("sms_body", message);
        startActivity(sendIntent);
    }

   /**
     * 调起系统发短信功能
     *
     * @param phoneNumber
     * @param message
     */
    public void doSendSMSTo(String phoneNumber, String message) {
        if (PhoneNumberUtils.isGlobalPhoneNumber(phoneNumber)) {
            Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:" + phoneNumber));
            intent.putExtra("sms_body", message);
            startActivity(intent);
        }
    }

打电话

方式一:(推荐)

  Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + "10086"));
   startActivity(intent);

PS:这种方式的拨打电话,有没有打电话的权限都可以,不过它只会跳转到拨打电话的界面,而不会直接去拨打电话。

方式二:

if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                    Toast.makeText(MainActivity.this, "无权限", Toast.LENGTH_SHORT).show();
                    ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);//申请权限
                    // TODO: Consider calling
                    //    ActivityCompat#requestPermissions
                    // here to request the missing permissions, and then overriding
                    //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                    //                                          int[] grantResults)
                    // to handle the case where the user grants the permission. See the documentation
                    // for ActivityCompat#requestPermissions for more details.


                    return;
                } else {
                    Toast.makeText(MainActivity.this, "有权限", Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "10086"));
                    startActivity(intent);
                }


PS:这种方式需要动态申请一下权限,如果已经有权限了,会去直接拨打电话。

权限:

    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <!--打电话权限的设置:-->
    <uses-permission android:name="android.permission.CALL_PHONE"/>

这里需要强调一下:在6.0以后,虽然有些权限需要动态获取,但是在清单文件中,也要添加上相应的权限。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值