带有广播接收器的Android Alarm Manager在代码而不是清单中注册

时间:2010-08-10 09:30:42

标签: android broadcastreceiver alarmmanager

我想使用闹钟在特定时间运行一些代码。我已经成功实现了一个警报,广播接收器在清单中注册,但我理解它的方式,这种方法使用一个单独的类广播接收器。

我可以使用此方法启动另一个活动,但我无法使用它在我的主要活动中运行方法?

how can I notify a running activity from a broadcast receiver?

所以我一直试图在我的主要活动中注册我的广播接收器,如上面的答案所述。

private BroadcastReceiver receiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "hello", Toast.LENGTH_SHORT).show();
        uploadDB();         
    }
};    

public void onResume() {
    super.onResume();

    IntentFilter filter = new IntentFilter();
    filter.addAction(null);

    this.registerReceiver(this.receiver, filter);
}

public void onPause() {
    super.onPause();

    this.unregisterReceiver(this.receiver);
}

但是我无法让它与闹钟管理器一起使用,我不确定如何将警报意图链接到广播接收器。有人能指出我在活动中动态注册警报管理器广播接收器的例子吗?或解释我会怎么做?

2 个答案:

答案 0 :(得分:18)

这个怎么样?

Intent startIntent = new Intent("WhatEverYouWant");
PendingIntent startPIntent = PendingIntent.getBroadcast(context, 0, startIntent, 0);
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP, triggerTime, startPIntent);

然后在您的Manifest.xml文件中:

<receiver android:name="com.package.YourOnReceiver">
   <intent-filter>
       <action android:name="WhatEverYouWant" />
   </intent-filter>
</receiver>

据我所知,你还需要在Manifest中声明接收器。我不确定您是否可以将其设置为活动内的私有实例。你可以在你的活动中声明一个onReceive并调用它(如果BroadcastReceiver有一个接口。我不知道它是否有。)

答案 1 :(得分:1)

从您想要开始闹钟的位置启动警报意图。写下您想要开始收听警报的代码

Intent myIntent = new Intent(getBaseContext(), **AlarmReceiver**.class);
                PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 0, myIntent, 0);
                AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
                Calendar calendar = Calendar.getInstance();
                calendar.setTimeInMillis(System.currentTimeMillis());
                calendar.add(Calendar.MINUTE, shpref.getInt("timeoutint", 30));
                alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

在广播接收器中编写您想要接收的代码。并在清单中写下

<receiver android:name=".AlarmReceiver" android:process=":remote"/>

你也可以重复报警。 希望它有所帮助!