短信 Android 即使收到确认,应用程序也无法始终发送短信

SMS Android app does not always work to send SMS out even though confirmation is received

我有一个简单的应用程序,只需单击一个按钮即可向我的志愿者组织发送警报短信,但并不总是发送短信,即使吐司说该功能已成功执行。

我已经尝试多次安装和卸载该应用程序,但仍然是同样的问题。此外,正如您可能看到的那样,我已经添加了实际上将 SMS 发送到多个不同位置的调用,但我确信这不是问题,因为显示了成功的 toast,这意味着应用程序通过了那个点。

import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.util.ArrayList;

public class MainActivity extends Activity {
    private ArrayList<String> phones = new ArrayList<String>();
    private static final int PERMISSION_REQUEST_SEND_SMS = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button emergency_btn = findViewById(R.id.emergency_btn);
        fill_numbers();
        emergency_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.i("tag", "onClick: clicked");
                SMS_handler();
            }
        });
    }

    private void SMS_handler(){

        if (ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS)!=
                PackageManager.PERMISSION_GRANTED) {
            if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.SEND_SMS)){
            }
            else {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.SEND_SMS},
                        PERMISSION_REQUEST_SEND_SMS);
            }
        }
        else {
            send_SMS();
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], @NonNull int[] grantResults) {
        switch (requestCode) {
            case PERMISSION_REQUEST_SEND_SMS: {
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    send_SMS();
                }
                else {
                    Toast.makeText(getApplicationContext(), "SMS failed, please try again", Toast.LENGTH_LONG).show();
                }
            }
        }
    }

    private void send_SMS() {
        SmsManager smsManager = SmsManager.getDefault();

        for (int i = 0; i < phones.size(); i++){
            smsManager.sendTextMessage(phones.get(i), null,
                    "ΠΥΡΑΣΦΑΛΕΙΑ ΒΑΡΗΣ\nΕΠΕΙΓΟΝ\nΜΕΤΑΒΕΙΤΕ ΑΜΕΣΑ ΣΤΟΝ ΣΤΑΘΜΟ\n\n" +
                    "PYRASFALEIA VARIS\nEMERGENCY\nPLEASE PROCEED TO THE STATION IMMEDIATELY", null, null);
            System.out.println("sending ");
            System.out.println(i);
        }
        Toast.makeText(getApplicationContext(), "SMS Sent", Toast.LENGTH_LONG).show();
    }


    private void fill_numbers() {
        phones.add("xxxxx");
        phones.add("xxxxxx");

    }
}

您认为这可能是 phone 问题而不是应用程序问题吗?如果我尝试手动发送短信,它会正常工作。

正如@Mike.M 在评论中所建议的那样,短信太大了。在不同的 SMS 中分解消息或截断消息有效。

答案here也可以提供进一步的帮助。