2013-02-24 106 views
1

我正在处理我的第一个应用程序,我的目标是发送一系列预定义的短信,从用户设置的日期和时间开始,然后相对于第一个设置的时间即发送第一个短信,在+ 3min发送第二个短信,在+ 7min发送第三个短信等)。我设法通过使用不同的待定内容请求代码一次设置所有的警报,并为每条消息设置多个广播接收器,但这看起来效率不高。是否有可能重复使用相同的请求代码(以取消一系列可能的事件),并在收到每个广播后从相同的接收器设置一个闹钟?下面的代码,欢迎任何建议。以设定的时间间隔发送一系列预定义的短信

主要活动

  Intent intent = new Intent(MainActivity.this, 
        Receiver1.class); 
      intent.putExtra(EXTRA_MESSAGE1, message1); 
      intent.putExtra(EXTRA_NUMBER, number); 

      Intent intent2 = new Intent(MainActivity.this, 
        Receiver2.class); 
      intent2.putExtra(EXTRA_MESSAGE2, message2); 
      intent2.putExtra(EXTRA_NUMBER, number); 

      PendingIntent sender = PendingIntent.getBroadcast(
        MainActivity.this, 1, intent, 0); 

      PendingIntent sender2 = PendingIntent.getBroadcast(
        MainActivity.this, 2, intent2, 0); 

      // Set alarm for this time 
      Calendar cal = Calendar.getInstance(); 
      cal.set(Calendar.YEAR, mYear); 
      cal.set(Calendar.MONTH, mMonth); 
      cal.set(Calendar.DAY_OF_MONTH, mDay); 
      cal.set(Calendar.HOUR_OF_DAY, mHour); 
      cal.set(Calendar.MINUTE, mMinute); 

      // Schedule alarm 
      AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
      am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender); 

      AlarmManager am2 = (AlarmManager) getSystemService(ALARM_SERVICE); 
      am2.set(AlarmManager.RTC_WAKEUP, 
        cal.getTimeInMillis() + 30 * 1000, sender2); 

接收机1个

public class Receiver1 extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE1); 
    String number = intent.getStringExtra(MainActivity.EXTRA_NUMBER); 

    sendSMS(number, message); 
}; 

// ---sends an SMS message to another device--- 
private void sendSMS(String phoneNumber, String message) { 
    SmsManager sms = SmsManager.getDefault(); 
    sms.sendTextMessage(phoneNumber, null, message, null, null); 
}; 
} 

接收机2

public class Receiver2 extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE2); 
    String number = intent.getStringExtra(MainActivity.EXTRA_NUMBER); 

    sendSMS(number, message); 
}; 

// ---sends an SMS message to another device--- 
private void sendSMS(String phoneNumber, String message) { 
    SmsManager sms = SmsManager.getDefault(); 
    sms.sendTextMessage(phoneNumber, null, message, null, null); 
}; 
} 
+0

别忘了帮兄弟出来有标记和/或upvote。 – 2013-02-28 14:36:08

回答

0

商店 “状态” 在一个文件中,在共享首选项或者在SQLite数据库。然后,只需在应用程序醒来时完成一揽子工作,就可以开始一个闹钟和广播接收器。

我有一个简单的例子SharedPreferences这里:

Android Shared Preferences

+0

谢谢比尔。我将为应用程序建立一个sqlite数据库。 – Ross 2013-02-27 13:14:25

0

下面的代码工作正常,我...

Thread t = new Thread(new Runnable() { 


     @Override 
     public void run() { 
      // TODO Auto-generated method stub 
      try { 

            for (int count = 1; count <= total_sms; count++) { 
            Log.i("----------------ppp------------", 
              "-----working-----------" + count); 
            SmsManager smsManager = SmsManager.getDefault(); 
            smsManager.sendTextMessage(number1, null, 
              "Hai this is to test duration", null, null); 
            Log.i("SMS_COUNT", "Number of sms send---" +count); 
            Thread.sleep(1000 * (Integer.parseInt(delay))); 

           } 

           } catch (Exception e) { 
              e.printStackTrace(); 
           } 

     } 
    } 
    ); 
    t.start();