发短信
参数的意义:
– 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以后,虽然有些权限需要动态获取,但是在清单文件中,也要添加上相应的权限。