2

sendMultipartTextMessage を多くの連絡先に送信するアプリを作成しています。アプリはアップデートのリストをダウンロードし、連絡先に送信します。主な問題は、以前の更新を送信した後、新しい更新をアプリに再度チェックさせたいことです。以前のメッセージがすべての受信者に送信されていることを確認したい。そのため、アプリは新しいリストをダウンロードして再度送信します。しかし、私が指摘した主な問題は、マルチパート SMS が各パートの送信後に送信レポートを作成することです。また、「case Activity.RESULT_OK:」イベントが何度も発生しました。つまり、TextMessages とパーツの長さ以上です。これが私が使用しているコードで、いくつかのWebサイトからコピーされたものです。

    private void sendSMS(String phoneNumber, String message)
        {        
            String SENT = "SMS_SENT";
            String DELIVERED = "SMS_DELIVERED";

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

            registerReceiver(new BroadcastReceiver(){
                @Override
                public void onReceive(Context arg0, Intent arg1) {
                    switch (getResultCode())
                    {
                    case Activity.RESULT_OK:
                        System.out.println("SMS SENT");
// msgcounter = length of recipients I want to send messages. 
                        msgcounter = msgcounter -1;
                        if (msgcounter < 0){
                                if (StartInfo){
                                    new RequestTask().execute(BaseUrl);
                                }
                        }else{
                            CreatMsg();
                        }
                        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 sms = SmsManager.getDefault();
            ArrayList<String> parts = sms.divideMessage(message);
            ArrayList<PendingIntent> sentIntents = new ArrayList<PendingIntent>();
            ArrayList<PendingIntent> deliveryIntents = new ArrayList<PendingIntent>();
            for (int number = 0; number < parts.size(); number++) { 
                    sentIntents.add(sentPI);
                    deliveryIntents.add(deliveredPI);

            }
            sms.sendMultipartTextMessage(phoneNumber, null, parts,sentIntents, deliveryIntents);    
        }
4

1 に答える 1

1

他の誰かが同じソリューションを探している場合に備えて、それregisterReceiverは が複数回呼び出されているためです。そのため、受信者が登録されている回数だけレポートが処理されています。解決策は、 から移動registerReceiverしてsendSMS、一度だけ呼び出すことです。

于 2019-12-26T05:20:10.733 に答える