Android短信发送App开发问题:点击发送按钮无响应
解决Android短信发送App点击按钮无响应的问题
嘿,我仔细看了你的代码,发现了几个关键问题导致点击发送按钮后没反应、甚至连Toast都不弹出,咱们一步步来修复:
1. 权限已授予时的逻辑缺失(核心问题)
你的sendSMSMessage()方法只处理了权限未授予的情况,但当用户已经授权过SEND_SMS权限时,方法直接执行结束,完全没触发短信发送和Toast提示的逻辑!
我把代码重构了一下,补上权限已授予的分支,还加了空值判断避免崩溃:
protected void sendSMSMessage() { phoneNo = txtphoneNo.getText().toString(); message = txtMessage.getText().toString(); // 先检查输入是否为空,避免空指针或无效发送 if (phoneNo.isEmpty() || message.isEmpty()) { Toast.makeText(getApplicationContext(), "请填写手机号和短信内容", Toast.LENGTH_SHORT).show(); return; } if (ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.SEND_SMS)) { // 这里可以添加弹窗,告诉用户为什么需要短信权限 Toast.makeText(this, "需要短信权限才能发送消息哦", Toast.LENGTH_SHORT).show(); } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.SEND_SMS}, MY_PERMISSIONS_REQUEST_SEND_SMS); } } else { // 权限已授予,直接执行发送逻辑 sendSMS(); } } // 把发送短信的逻辑抽成单独方法,代码更清晰 private void sendSMS() { try { SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(phoneNo, null, message, null, null); Toast.makeText(getApplicationContext(), "SMS Sent!", Toast.LENGTH_LONG).show(); } catch (Exception e) { Toast.makeText(getApplicationContext(), "SMS sending failed! Please Try Again.", Toast.LENGTH_LONG).show(); Log.e("SMS_ERROR", "发送失败原因: " + e.getMessage()); } }
2. EditText输入类型配置错误
你的手机号输入框用了android:inputType="textPersonName",这会让输入法显示人名输入模式,不符合手机号的输入场景;短信内容也适合改成多行输入。修改后的布局代码:
<!-- 手机号输入框 --> <EditText android:id="@+id/etphoneNo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="159dp" android:ems="10" android:hint="Enter Phone Number" android:inputType="phone" /> <!-- 改成phone类型 --> <!-- 短信内容输入框 --> <EditText android:id="@+id/etMessage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="212dp" android:ems="10" android:hint="Enter Message" android:inputType="textMultiLine" /> <!-- 改成多行输入 -->
3. 必须在Manifest中声明静态权限
哪怕用了动态权限申请,也得在AndroidManifest.xml里添加权限声明,否则动态申请可能失效:
<uses-permission android:name="android.permission.SEND_SMS" />
内容的提问来源于stack exchange,提问作者AwesomeABM




