Монитор, когда каждое SMS-сообщение действительно отправлено - PullRequest
0 голосов
/ 19 декабря 2018

Это более или менее продолжение этой проблемы, но немного более сложное: Как отслеживать состояние каждого отправленного SMS?

Я пытаюсь создать файл дампа изкогда SMS-сообщения, которые отправляет мое приложение, либо успешно отправлены, либо доставлены.Я пытался следовать приведенному выше примеру, даже присваивая каждой отправке / доставке свой уникальный идентификатор (например, DELIVER1, DELIVER2 и т. Д.), Но в итоге я ничего не получаю, так как получатели никогда ничего не поднимают.Обратите внимание, что в отличие от большинства смс-приложений, мое предназначено для быстрой отправки смс-сообщений.

Вот фрагмент моего кода:

//Outside a for loop
String sentI = "SMS_SENT";
String delvI = "SMS_DELIVERED";
int z=0;

//inside a for loop
                    try
                    {
                        PendingIntent sentIntent = PendingIntent.getBroadcast(getApplicationContext(),0,new Intent(sentI.concat(Integer.toString(z))),0);
                        PendingIntent deliveredIntent = PendingIntent.getBroadcast(getApplicationContext(),0,new Intent(delvI.concat(Integer.toString(z))),0);
                        //Detecting When a Message Has been Successfully Sent
                        registerReceiver(new BroadcastReceiver() {
                            @Override
                            public void onReceive(Context context, Intent intent) {
                                if(getResultCode()==Activity.RESULT_OK)
                                {
                                    sentDump.add(System.currentTimeMillis());
                                }
                                else
                                {
                                    sndfailDump.add((Long.toString(System.currentTimeMillis())).concat(",").concat("'").concat("Sms Failed to Send.").concat("'\n"));
                                }
                            }
                        }, new IntentFilter(sentI.concat(Integer.toString(z))));

                        //Detecting When a Message has been successfully delivered
                        registerReceiver(new BroadcastReceiver() {
                            @Override
                            public void onReceive(Context context, Intent intent) {
                                if(getResultCode()==Activity.RESULT_OK)
                                {
                                    delvDump.add(System.currentTimeMillis());
                                }
                                else
                                {
                                    delvFailDump.add((Long.toString(System.currentTimeMillis())).concat(",").concat("'").concat("Sms failed to deliver.").concat("'\n"));
                                }
                            }
                        }, new IntentFilter(delvI.concat(Integer.toString(z))));
                        if(apiState==true)
                        {
                                sayHello(message[z]);
                        }
                        else
                        {
                                SmsManager.getDefault().sendTextMessage(phoneNum, null, message[z], sentIntent, deliveredIntent);
                        }
                        smsLog.add(System.currentTimeMillis());
                        msgNoTracker = msgNoTracker + 1;
                    } catch (Exception e){
                        StringWriter sw = new StringWriter();
                        PrintWriter pw = new PrintWriter(sw);
                        e.printStackTrace(pw);
                        //Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_LONG).show();
                        //crashTrack.add((Long.toString(System.currentTimeMillis())).concat("\n").concat(e.toString())); //original
                        crashTrack.add((Long.toString(System.currentTimeMillis())).concat(",").concat("'").concat(sw.toString()).concat("'\n"));
                        //reset all incremental value back one for proper repeat
                        j=j-1;
                        continue; //jump back to for loop
                    }

                    try{
                        Thread.sleep(messageDelay);
                    } catch(InterruptedException e){
                        e.printStackTrace();
                    }
                    z+=1;

цель дампа - просторегистрировать время отправки и доставки, а не управлять тем, была ли успешно отправлена ​​смс или нет ...

...