You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动