1

変更したという事実を除いて、 http://mobiforge.com/developing/story/sms-messaging-androidコード例を一語一語使用しています。

import android.telephony.gsm.SmsManager;

に:

import android.telephony.SmsManager;

SMSは正常に送信されていますが、配信された(ネットワークに送信された)というTOASTメッセージが届きません。SMSをアプリケーションに統合しようとしていますが、これは重要です。ストックSMSアプリは、「送信サークル」の表示をいつ停止するかを他にどのように知ることができるので、これができると確信しています。関連するコードセクションは次のとおりです。

   //---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));          

私はJellyBeanROMを使用していますが、しばらく前にGingerbreadとICSで同じセグメントをテストしたところ、同じ結果が得られたと思います。APIが変更されましたか、それともサンプルに問題がありますか?それが助けになるなら、私はSasmsungGSIIIでテストしています。私の古いテストはエピックで行われました。

4

2 に答える 2

1

現在この問題が発生している場合、Android 4.4 以降でこれをテストしている場合、アプリがデフォルトの SMS アプリでない限り機能しません。

ドキュメントから -

Android 4.4 以降、システム設定により、ユーザーは「デフォルトの SMS アプリ」を選択できます。選択すると、既定の SMS アプリのみが SMS プロバイダーに書き込むことができ、既定の SMS アプリのみが、ユーザーが SMS を受信したときに SMS_DELIVER_ACTION ブロードキャストを受信したり、ユーザーが MMS を受信したときに WAP_PUSH_DELIVER_ACTION ブロードキャストを受信したりします。デフォルトの SMS アプリは、新しいメッセージを受信または送信するときに SMS プロバイダーに詳細を書き込む役割を果たします。

ここを参照してください。

于 2015-03-28T08:58:09.843 に答える
0

あなたのコードはかなりうまくいっています。おそらく問題は、キャリアが配信レポートを提供していないことです (サービスを購読するオプションがある場合があります)、または携帯電話で配信レポートをオンにしていない可能性があります。Play ストアには、各 SMS のステータスを確認できる配信レポートという便利なアプリがあります。

于 2014-10-13T19:58:02.600 に答える