无法准确记录Android的多个背对背SMS传递意图

时间:2019-02-20 20:13:02

标签: android android-intent android-pendingintent android-broadcastreceiver android-sms

我正在开发一个Android应用,该应用几乎可以同时将多个SMS消息快速发送到同一号码(请注意,这是出于研究目的)。我需要这个应用程序来跟踪它的传递意图,方法是添加一个包含我想要传递的信息的捆绑包。但是,我遇到的问题如下:

  • 如果我不使用任何待处理的意图标志(也称为0)或FLAG_IMMUTABLE,则捆绑包的值始终与发送的第一条消息相同,并且会得到所有已传递消息的转储。
  • 如果我使用FLAG_UPDATE_CURRENT,我将得到一个分发包值,该值会偶尔/随机更新(多个意图包含相同的分发包值),并且会转储所有传递的消息。
  • 如果我使用FLAG_ONE_SHOT,我将获得分配的准确的捆绑包值(该值应被接收),但是我只会得到非常少量的意图转储,并且该数量很小(〜1% ),即使我碰巧连续发送了1000多个消息。

这是消息发送方法的一部分,负责在 MainActivity 中发送SMS:

int z = 0;
for(int j=1; j<=messageCnt;j++){
    try {
         Intent dI = new Intent("SMS_DELIVERED");

         Bundle b = new Bundle();
         b.putString("MSGNUM",Integer.toString(z+1));
         dI.putExtras(b);
         dI.putExtra("MNUMSTR",Integer.toString(z+1));
         PendingIntent deliveredIntent = PendingIntent.getBroadcast(getApplicationContext(),0,dI,PendingIntent.FLAG_ONE_SHOT);
         deliveredPendingIntents.add(z,deliveredIntent);

         SmsManager.getDefault().sendTextMessage(phoneNum, null, message[z], null, deliveredIntent);
         b.clear();
    }
    catch (Exception e){
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        e.printStackTrace(pw);
        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 and reattempt send.
    }
}

然后,无论我要在哪里(无论是在新应用程序中还是在当前应用程序中),我都会输入以下内容来注册接收器类。

//Create Broadcast receivers for sent and delivered intents
SmsDeliveredReceiver SDR = new SmsDeliveredReceiver();

//register the receivers
registerReceiver(SDR, new IntentFilter("SMS_DELIVERED"));

最后,我的目的是广播接收器类, SmsDeliveredReciever

public class SmsDeliveredReceiver extends BroadcastReceiver {
        protected static int sentCount = 0;

        @Override
        public void onReceive(Context context, Intent dI){

            /*File delivDumpName = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),MainActivity.dateTime.concat("DelivDump.txt"));
            File delivfailDumpName = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),MainActivity.dateTime.concat("DelivFailDump.txt"));*/

            Bundle bundle = dI.getExtras();
            switch (getResultCode()){
                case Activity.RESULT_OK:
                    if(bundle!=null){
                        String msgNum = bundle.getString("MSGNUM","0");
                        MainActivity.delvDump.add(Long.toString(System.currentTimeMillis()).concat(",'Msg ").concat(msgNum).concat("'\n"));
                    } else {
                        MainActivity.delvDump.add(Long.toString(System.currentTimeMillis()).concat(",'Msg ").concat("Number Unknown'\n"));//Integer.toString(sentCount)).concat("'\n"));
                    }
                    break;
                case Activity.RESULT_CANCELED:
                    if(bundle!=null){
                        String msgNum = bundle.getString("MSGNUM","0");
                        MainActivity.delvDump.add(Long.toString(System.currentTimeMillis()).concat(",'Sms Failed to Deliver.',' Msg ").concat(msgNum).concat("'\n"));
                    } else {
                        MainActivity.delvDump.add(Long.toString(System.currentTimeMillis()).concat(",'Sms Failed to Deliver.',' Msg ").concat("Number Unknown'\n"));//Integer.toString(sentCount)).concat("'\n"));
                    }
                    break;
            }

            /*MainActivity.writeFiles(delivDumpName,String.valueOf(MainActivity.delvDump));
            MainActivity.writeFiles(delivfailDumpName, String.valueOf(MainActivity.delvFailDump));*/
            sentCount++;
        }
}

请注意,SendIntent会发生完全相同的事情。我已经阅读了所有Google Android SDK文档,到目前为止,stackoverflow提供的答案仅适用于警报/警报,而不适用于SMS意图,其中SMS的唯一现有教程和论坛条目都是单发送SMS。 不,我尝试发送多部分信息

所需的输出

  1. 所有SMS传送意图都应在广播接收器中捕获
  2. 每个捕获的意图必须通过捆绑包输出其自己的唯一消息关联号。
  3. 捕获的意图量应等于成功发送的消息数(是的,我确实有办法检查消息是否被接收)

是否可以实现所需的输出,还是我对Android的要求过高? 接收方是否为单独的应用程序与我无关紧要,尽管如果它是单独的应用程序更可取。

注意:除了准确跟踪/记录已发送/已发送的意图之外,应用程序中的所有功能均正常且无错误。

0 个答案:

没有答案