概述
通过这个小练习巩固Activity跳转知识.
先上丑陋的界面…
界面实现代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Activity.send"
android:orientation="vertical">
<EditText
android:id="@+id/et_number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入电话号码" />
<EditText
android:id="@+id/et_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入短信内容" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/btn_number"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:text="打电话" />
<Button
android:id="@+id/btn_message"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="发短信" />
</LinearLayout>
</LinearLayout>
实现功能
1. 短按启动拨号界面
2.长按打电话
3.短按启动短信编辑界面
4.长按发短信
测试这个需要两个模拟器,而我比较懒,有兴趣的同学可以测一测…
主体实现代码
public class send extends AppCompatActivity {
private EditText mNumberEt;
private EditText mMessageEt;
private Button mBtnCall;
private Button mBtnSend;
//打电话权限请求码
private static final int CALL_PHONE_REQUEST_CODE = 1;
//发短信权限请求码
private static final int SEND_MESSAGE_REQUEST_CODE = 2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_send);
//初始化控件
init();
//点击启动拨号界面
mBtnCall.setOnClickListener(v -> {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_DIAL);
String number = mNumberEt.getText().toString();
intent.setData(Uri.parse("tel:" + number));
startActivity(intent);
});
//点击启动编辑短信界面
mBtnSend.setOnClickListener(v -> {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SENDTO);
String number = mNumberEt.getText().toString();
String message = mMessageEt.getText().toString();
intent.setData(Uri.parse("smsto:" + number));
intent.putExtra("sms_body", message);
startActivity(intent);
});
// 长按打电话
mBtnCall.setOnLongClickListener(v -> {
String number = mNumberEt.getText().toString();
Uri uri = Uri.parse("tel:" + number);
if (checkCallPermission()) {
call();
} else {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CALL_PHONE}, CALL_PHONE_REQUEST_CODE);
}
//表示此事件已经被消费,不会触发点击事件.如果不返回true,则当长按松手后会触发onClick事件.
return true;
});
// 长按发短信
mBtnSend.setOnLongClickListener(v -> {
if (checkSMSPermission()) {
sendMessage();
} else {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.SEND_SMS}, SEND_MESSAGE_REQUEST_CODE);
}
return true;
});
}
//Android6.0后运行时权限引入,不仅需要在Manifest中添加对应权限, 还需要进行对应权限的动态申请.
private boolean checkCallPermission() {
return ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE)
== PackageManager.PERMISSION_GRANTED;
}
private boolean checkSMSPermission() {
return ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS)
== PackageManager.PERMISSION_GRANTED;
}
private void call() {
String number = mNumberEt.getText().toString();
Uri uri = Uri.parse("tel:" + number);
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(uri);
startActivity(intent);
}
private void sendMessage() {
SmsManager manager = SmsManager.getDefault();
String number = mNumberEt.getText().toString();
String message = mMessageEt.getText().toString();
//后两个参数用来设置短信回执.
manager.sendTextMessage(number, null, message, null, null);
}
//ContextCompat.checkSelfPermission()的回调方法, 每次调用checkSelfPermission都会调用此方法.
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case CALL_PHONE_REQUEST_CODE:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
call();
} else {
Toast.makeText(this, "您拒绝了拨打电话权限,无法拨打电话!", Toast.LENGTH_SHORT).show();
}
break;
case SEND_MESSAGE_REQUEST_CODE:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
sendMessage();
} else {
Toast.makeText(this, "您拒绝了发送短信权限,无法发送短信!", Toast.LENGTH_SHORT).show();
}
break;
}
}
private void init() {
mNumberEt = findViewById(R.id.et_number);
mMessageEt = findViewById(R.id.et_message);
mBtnCall = findViewById(R.id.btn_number);
mBtnSend = findViewById(R.id.btn_message);
}
}