Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android sendSMS()方法可以';我不读字符串_Android_Android Fragments - Fatal编程技术网

Android sendSMS()方法可以';我不读字符串

Android sendSMS()方法可以';我不读字符串,android,android-fragments,Android,Android Fragments,我知道存在一些明显的错误,但我尝试了很多方法,但无法让此方法读取全局字符串: public void sendSMS(String phoneNumber) { SmsManager smsManager = SmsManager.getDefault(); String message = mMessage; String SENT = "SMS_SENT"; String DELIVERED = "SMS_DELIVERED"; SmsManage

我知道存在一些明显的错误,但我尝试了很多方法,但无法让此方法读取全局字符串:

public void sendSMS(String phoneNumber) {
    SmsManager smsManager = SmsManager.getDefault();

    String message = mMessage;
    String SENT = "SMS_SENT";
    String DELIVERED = "SMS_DELIVERED";

    SmsManager sms = SmsManager.getDefault();
    ArrayList<String> parts = sms.divideMessage(message);
    int messageCount = parts.size();

    Log.i("Message Count", "Message Count: " + messageCount);
    Log.i("Order", message);
    Toast.makeText(getBaseContext(), message,
            Toast.LENGTH_SHORT).show();

    ArrayList<PendingIntent> deliveryIntents = new ArrayList<PendingIntent>();
    ArrayList<PendingIntent> sentIntents = new ArrayList<PendingIntent>();

    PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(
            SENT), 0);
    PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
            new Intent(DELIVERED), 0);

    for (int j = 0; j < messageCount; j++) {
        sentIntents.add(sentPI);
        deliveryIntents.add(deliveredPI);
    }

    // ---when the SMS has been sent---
    registerReceiver(new BroadcastReceiver() {
        @Override
        public void onReceive(Context arg0, Intent arg1) {
            switch (getResultCode()) {
            case Activity.RESULT_OK:
                Toast.makeText(getBaseContext(), sms_sent,
                        Toast.LENGTH_SHORT).show();
                break;
            case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                Toast.makeText(getBaseContext(), generic_failure,
                        Toast.LENGTH_SHORT).show();
                break;
            case SmsManager.RESULT_ERROR_NO_SERVICE:
                Toast.makeText(getBaseContext(), no_service,
                        Toast.LENGTH_SHORT).show();
                break;
            case SmsManager.RESULT_ERROR_NULL_PDU:
                Toast.makeText(getBaseContext(), "Null PDU",
                        Toast.LENGTH_SHORT).show();
                break;
            case SmsManager.RESULT_ERROR_RADIO_OFF:
                Toast.makeText(getBaseContext(), radio_off,
                        Toast.LENGTH_SHORT).show();
                break;
            }
        }
    }, new IntentFilter(SENT));

    // ---when the SMS has been delivered---
    registerReceiver(new BroadcastReceiver() {
        @Override
        public void onReceive(Context arg0, Intent arg1) {
            switch (getResultCode()) {

            case Activity.RESULT_OK:
                Toast.makeText(getBaseContext(), sms_delivered,
                        Toast.LENGTH_SHORT).show();
                break;
            case Activity.RESULT_CANCELED:
                Toast.makeText(getBaseContext(), sms_not_delivered,
                        Toast.LENGTH_SHORT).show();
                break;
            }
        }
    }, new IntentFilter(DELIVERED));
    smsManager.sendTextMessage(phoneNumber, null, message, sentPI,
            deliveredPI);
    /*
     * sms.sendMultipartTextMessage(phoneNumber, null, parts, sentIntents,
     * deliveryIntents);
     */
}

当然,我已经用留言和祝酒词写了日志。每个项目都会显示,但sendSMS()不想发送它。不过,当我在字符串消息中而不是在mMessage中放置“somestringhere”时,它工作得非常好。任何人都可以捕获使sendTextMessage无法接收公共字符串消息的原因?

您的问题似乎是,您的字符串超过了单个SMS消息的最大字符长度,需要拆分并与
sendMultipartTextMessage()一起发送。

此最大长度取决于所用字母表的字符位大小:对于标准GSM 7位字母表,它是160个字符;对于8位字母表,它是140个字符;对于16位字母表(包括任何非拉丁Unicode字符),它只有70位


如果您试图发送的消息超过了长度限制,
sendTextMessage()
将自动失败,不会引发错误或异常,也不会向提供程序写入尝试指示(如果适用)。

我注意到您已注释掉了
sendMultipartTextMessage()
方法。你确定你没有达到
sendTextMessage()
的最大字符限制吗?它在没有它的其他应用程序上工作,因此可能不是这样。无论如何,我使用的是Moto G,所以很难达到极限;)我想你不明白字符限制是什么意思。SMS协议为单个消息定义了160个字符的限制(对于普通ASCII)。根据使用的字母表,此数字可能会更低。如果总消息长度超过此长度,则需要拆分并使用多部分方法发送。这与设备型号无关。我建议您使用由多个部分组成的方法进行测试,因为如果消息太长,
sendTextMessage()
将自动失败。它可以工作!我是个该死的白痴-为什么我没用那个?非常感谢!
public void getListToString(){
    StringBuilder sb = new StringBuilder();
    for(ReviewItem item : mCurrentReviewItems){
        sb.append(item.getTitle() + ": " + item.getDisplayValue() + "\n");
    }

    String msg = sb.toString();
    ((MainActivity)getActivity()).setMessage(msg);              
}