【问题标题】:Send a series of predefined sms messages at set intervals以设定的时间间隔发送一系列预定义的短信
【发布时间】:2013-02-24 12:35:16
【问题描述】:

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

主要活动

            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);
};
}

【问题讨论】:

  • 不要忘记通过勾选和/或投票来帮助兄弟。

标签: android sms broadcastreceiver alarm android-pendingintent


【解决方案1】:

将“状态”存储在文件、共享首选项或 sqlite 数据库中。然后,当您的应用唤醒时,您只需要做一堆工作,您就可以使用一个警报和广播接收器。

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

Android Shared Preferences

【讨论】:

  • 谢谢比尔。我将尝试为应用程序设置一个 sqlite 数据库。
【解决方案2】:

下面的代码对我来说很好......

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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 2013-08-04
    相关资源
    最近更新 更多