从不同的JAVA类调用方法

时间:2013-07-17 09:42:40

标签: java android broadcastreceiver alarmmanager

我有一个名为“createAlarms()”的方法,它在初始应用程序设置中,设置特定时间的警报。在运行此警报时,它会创建一个我正在使用广播接收器类创建的通知。

public void createAlarms() {
    cal = Calendar.getInstance();
    cal.add(Calendar.HOUR, alarmintervalint);
    calintent = new Intent(this, AlarmBroadcastReceiver.class);
    calpendingintent = PendingIntent.getBroadcast(this.getApplicationContext(), 12345, calintent, 0);
    am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
    am.set(AlarmManager.RTC_WAKEUP, alarmintervalint, calpendingintent);
}

我希望此警报重复每个“alarmintervalint”时间段。我可以通过使用“am.setRepeating()”函数来做到这一点,但我的问题有点复杂。在发送一定数量的警报(例如50将由程序计算)之后,我希望所有值都改变,以便警报器值将改变。

private void showNotification(Context context) {
    PendingIntent notifpi = PendingIntent.getActivity(context, 0, new Intent(context, Main.class), 0);

    NotificationCompat.Builder mBuilder = 
        new NotificationCompat.Builder(context)
        .setSmallIcon(R.drawable.ic_launcher)
        .setContentTitle("Hello!")
        .setContentText("Welcome!")
        .addAction(R.drawable.ic_launcher, "Open App", notifpi);
    mBuilder.setContentIntent(notifpi);
    mBuilder.setDefaults(Notification.DEFAULT_SOUND);
    mBuilder.setAutoCancel(true);
    NotificationManager mNotificationManager =
        (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    mNotificationManager.notify(1, mBuilder.build());
    System.out.println("6");

}

例如,现在,警报每2小时响一次,我每2小时收到一次通知。收到50个通知后,我想将闹钟设置为3小时后关闭。 50次通知后再次使用4小时。 (这只是一个例子,它会有点复杂。

我该怎么做?现在我想在我的broadcastreceiver类中有一些计数器,并且在计数器达到50之后(在这个例子中),它将调用createAlarms()类并改变时间和东西。这会有用吗?

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用Timer。在初始设置方法,主要方法或其他方面设置TimerTask

示例:

import java.util.TimerTask;

public class Schedular extends TimerTask {
    @Override
    public void run() {
        //your implementation.
        System.out.println("Run Me ~");
    }
}

import java.util.Timer;
import java.util.TimerTask;

public class Main{
    public static void main(String[] args){

        TimerTask task = new Schedular();
        Timer timer = new Timer();
        //miliseconds
        timer.schedule(task, 1000, 60000);
    }
}

参考:Timer

答案 1 :(得分:0)

我不完全确定您使用的是什么警报器,但看起来您希望人们逐渐减少吸烟次数。
在这种情况下,我想添加到之前的答案,您可能希望保留上次使用的间隔,以防您的应用程序崩溃或手机重新启动。您可以使用SharedPreferences轻松实现这一目标。