java - 如何避免警报管理器以相同的时间间隔动态使用不同的消息覆盖?

标签 java android sms alarmmanager

如果我们为两条不同的消息选择相同的时间间隔会发生什么,它没有发送相应的方式,它采用第一条消息内容并发送第二条短信时间。 我想使用动态方式以相同的间隔发送不同的短信。

MyAlaramactivity.java

else if (mytime.equals("每 5 分钟")) {

                        editor1.putString("p1",edittextSmsNumber.getText().toString());
                        editor1.putString("m1",edittextSmsText.getText().toString());
                        editor1.commit();
                        edittextSmsNumber.setText(" ");
                        edittextSmsText.setText(" ");


                        Calendar calendar = Calendar.getInstance();

                        calendar.set(datep.getYear(), datep.getMonth(),
                                datep.getDayOfMonth(),
                                timep.getCurrentHour(),
                                timep.getCurrentMinute(), 0);
                        Intent myIntent1 = new Intent(AndroidAlarmSMS.this,
                                MyAlarmService.class);
                        Bundle bundle = new Bundle();
                        bundle.putInt("service", 1);
                        myIntent1.putExtras(bundle);
                        //myIntent1.putExtra("service", "s1");
                        myIntent1.setData(Uri.parse("timer:myIntent1"));
                        pendingIntent1 = PendingIntent.getService(
                                AndroidAlarmSMS.this, 1, myIntent1, PendingIntent.FLAG_UPDATE_CURRENT);

                        AlarmManager alarmManager1 = (AlarmManager) getSystemService(ALARM_SERVICE);
                        alarmManager1.setRepeating(AlarmManager.RTC_WAKEUP,
                                calendar.getTimeInMillis(), 1000 * 60 * 2,
                                pendingIntent1);




                        // Millisec * Second *
                                                // Minute
                    } else if (mytime.equals("Every hour")) {
                        editor2.putString("p2",edittextSmsNumber.getText().toString());
                        editor2.putString("m2",edittextSmsText.getText().toString());
                        editor2.commit();
                        edittextSmsNumber.setText(" ");
                        edittextSmsText.setText(" ");
                        Calendar calendar = Calendar.getInstance();

                        calendar.set(datep.getYear(), datep.getMonth(),
                                datep.getDayOfMonth(),
                                timep.getCurrentHour(),
                                timep.getCurrentMinute(), 0);
                        Intent myIntent2 = new Intent(AndroidAlarmSMS.this,
                                MyAlarmService.class);
                        Bundle bundle = new Bundle();
                        bundle.putInt("service", 2);
                        myIntent2.putExtras(bundle);
                        myIntent2.setData(Uri.parse("timer:myIntent2"));
                        pendingIntent2 = PendingIntent.getService(
                                AndroidAlarmSMS.this, 2, myIntent2, PendingIntent.FLAG_UPDATE_CURRENT);

                        AlarmManager alarmManager2 = (AlarmManager) getSystemService(ALARM_SERVICE);

                        alarmManager2.setRepeating(AlarmManager.RTC_WAKEUP,
                                calendar.getTimeInMillis(), 1000 * 60 * 3,
                                pendingIntent2); 




This is my service class



public void onStart(Intent intent, int startId) {
  super.onStart(intent, startId);
  Bundle bundle = intent.getExtras();
  //String status= b.getString("service");
  status = bundle.getInt("service", 0);


  if(i==2)
   {
   i++;
   Toast.makeText(this, "Hiii", Toast.LENGTH_LONG).show();
   }
   else
   {
       String share_pref_file = "IMS";
          SharedPreferences prefs = getSharedPreferences(share_pref_file,
          Context.MODE_PRIVATE);
       if(status == 1)
       {
           String number = prefs.getString("p1", "");
           String message = prefs.getString("m1", "");
              //String message= prefs.getString("extraSmsText", "");

              Toast.makeText(this, "MyAlarmService.onStart()", Toast.LENGTH_LONG).show();
              Toast.makeText(this,
                     number,
                     Toast.LENGTH_LONG).show();

              SmsManager smsManager = SmsManager.getDefault();
              smsManager.sendTextMessage(number, null, message, null, null);  
       }
       else if (status == 2)
       {
           String share_pref_file1 = "IMS2";
              SharedPreferences prefs2 = getSharedPreferences(share_pref_file1,
              Context.MODE_PRIVATE);
           String number = prefs2.getString("p2", "");
           String message = prefs2.getString("m2", "");
              //String message= prefs.getString("extraSmsText", "");

              Toast.makeText(this, "MyAlarmService.onStart()", Toast.LENGTH_LONG).show();
              Toast.makeText(this,
                     number,
                     Toast.LENGTH_LONG).show();
              try{
                  SmsManager smsManager = SmsManager.getDefault();
                    smsManager.sendTextMessage(number, null, message, null, null);  
                      Toast.makeText(this, "Message sent successfully", Toast.LENGTH_LONG).show();
              }
              catch(Exception e)
              {
                  Toast.makeText(this,
                            "I will kill you enter correct number",
                             Toast.LENGTH_LONG).show(); 
              }


       }

必须避免 alarammanager 在相同的时间间隔内被覆盖

最佳答案

问题: 待处理的意向是最重要的。

解决方案: 您只需要为每个未决 Intent 提供唯一 ID

示例:

您已经在

中提供了 0 作为 id
pendingIntent = PendingIntent.getService(
                                AndroidAlarmSMS.this, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);

因此不要在下一个未决 Intent 中再次提供 0,使用 1 和 2 而不是 < strong>0 如下所述:

pendingIntent1 = PendingIntent.getService(
                                AndroidAlarmSMS.this, 1, myIntent1, PendingIntent.FLAG_UPDATE_CURRENT);


pendingIntent2 = PendingIntent.getService(
                                AndroidAlarmSMS.this, 2, myIntent2, PendingIntent.FLAG_UPDATE_CURRENT);

希望对您有所帮助!!

关于java - 如何避免警报管理器以相同的时间间隔动态使用不同的消息覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20469499/

相关文章:

android - 当我使用自定义适配器时如何从 Android 中的 ListView 获取数据

iphone - 操作 iOS 短信数据库

javascript - 您可以使用 WhatsApp API For Business 来验证用户吗?

android - Appcelerator Titanium 或 PhoneGap 上的 iPhone 和 Android 应用程序

java - 如何在servlet java中获取客户端公共(public)IP地址

java - 如何在每次应用程序启动时刷新应用程序以获取新数据?

java - 在java中使用除法并得到一个int或将其乘以3

java - 使用 JPanel 实现 Windows 计算器布局

Android Activity 识别不适用于 Nexus 5

android - 运动布局不应用窗口插图