如何实现点击按钮发送TextView内容至指定号码(仅需发送功能)
Android实现点击按钮发送TextView内容到指定号码
嘿,我来帮你搞定这个需求!要实现点击按钮把TextView里的内容发给指定号码,其实分几步就能搞定,我给你详细拆解一下:
1. 先添加短信权限
首先得让App拥有发送短信的权限,咱们先在AndroidManifest.xml里添加静态权限:
<uses-permission android:name="android.permission.SEND_SMS" />
注意:Android 6.0(API 23)及以上版本,SEND_SMS属于危险权限,光加静态权限不够,还得在代码里动态申请权限,不然会直接报错。
2. 写布局文件
咱们弄个简单的布局,包含一个显示内容的TextView和触发发送的Button:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp"> <TextView android:id="@+id/tv_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="这是要发送的短信内容" android:textSize="18sp"/> <Button android:id="@+id/btn_send_sms" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="发送短信" android:layout_marginTop="20dp"/> </LinearLayout>
3. 核心逻辑代码
我分别给你Java和Kotlin版本的实现,你按需选用:
Java版本
import android.Manifest; import android.content.pm.PackageManager; import android.os.Bundle; import android.telephony.SmsManager; import android.view.View; import android.widget.Button; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; public class MainActivity extends AppCompatActivity { private static final int SMS_PERMISSION_REQUEST_CODE = 100; private TextView tvContent; private Button btnSendSms; // 指定要发送的号码 private final String TARGET_PHONE_NUMBER = "1234567890"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvContent = findViewById(R.id.tv_content); btnSendSms = findViewById(R.id.btn_send_sms); btnSendSms.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 先检查权限 if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) { // 没有权限,申请权限 ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.SEND_SMS}, SMS_PERMISSION_REQUEST_CODE); } else { // 有权限,直接发送短信 sendSms(); } } }); } private void sendSms() { String smsContent = tvContent.getText().toString().trim(); if (smsContent.isEmpty()) { // 可以加个Toast提示内容为空 return; } SmsManager smsManager = SmsManager.getDefault(); // 处理长短信,自动拆分 for (String part : smsManager.divideMessage(smsContent)) { smsManager.sendTextMessage(TARGET_PHONE_NUMBER, null, part, null, null); } // 发送成功后可以加个Toast提示 } // 权限申请结果回调 @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == SMS_PERMISSION_REQUEST_CODE) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 用户同意权限,发送短信 sendSms(); } else { // 用户拒绝权限,可以提示用户去设置里开启 } } } }
Kotlin版本
import android.Manifest import android.content.pm.PackageManager import android.os.Bundle import android.telephony.SmsManager import android.widget.Button import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat class MainActivity : AppCompatActivity() { private val SMS_PERMISSION_REQUEST_CODE = 100 private lateinit var tvContent: TextView private lateinit var btnSendSms: Button // 指定要发送的号码 private val TARGET_PHONE_NUMBER = "1234567890" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) tvContent = findViewById(R.id.tv_content) btnSendSms = findViewById(R.id.btn_send_sms) btnSendSms.setOnClickListener { // 检查权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) { // 申请权限 ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.SEND_SMS), SMS_PERMISSION_REQUEST_CODE) } else { // 有权限,发送短信 sendSms() } } } private fun sendSms() { val smsContent = tvContent.text.toString().trim() if (smsContent.isEmpty()) { // 提示内容为空 return } val smsManager = SmsManager.getDefault() // 拆分长短信 smsManager.divideMessage(smsContent).forEach { part -> smsManager.sendTextMessage(TARGET_PHONE_NUMBER, null, part, null, null) } // 发送成功提示 } override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) if (requestCode == SMS_PERMISSION_REQUEST_CODE) { if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { sendSms() } else { // 用户拒绝权限,提示去设置开启 } } } }
一些注意事项
- 测试的时候尽量用真实设备,模拟器可能没有短信发送的功能;
- 如果用户拒绝权限,记得给友好提示,引导用户去App设置里开启权限;
TARGET_PHONE_NUMBER可以改成你需要的指定号码,也可以做成可输入的EditText,不过你需求里是指定号码,所以直接写死就行;- 发送短信的方法里,
sendTextMessage的后面几个参数可以用来监听发送状态和送达状态,如果你不需要的话就传null就行。
内容的提问来源于stack exchange,提问作者Jonathan Reyes
相关产品推荐
相关产品推荐

