我想用一个闹钟在一定时间运行一些代码.我已经成功地实施了在清单中注册的广播接收器的报警,但是我明白了这一点,这种方法使用一个单独的类作为广播接收机.
我可以使用这种方法来开始另一个活动,但是我不能用它在主要的活动中运行一个方法?
(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); }
然而,我无法让这个与报警管理器一起工作,我不确定如何将报警意图链接到广播接收器.任何人都可以指出在活动中动态注册报警管理器广播接收器的示例?还是解释一下我会怎么做?
解决方法
这个怎么样?
Intent startIntent = new Intent("WhatEverYouWant"); PendingIntent startPIntent = PendingIntent.getBroadcast(context,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>
所以据我所知,你仍然必须在清单中声明接收者.我不知道你是否可以将其设置为活动内的私有实例.你可以在你的活动内部声明一个onReceive,并且调用它(如果BroadcastReceiver有一个接口,我不知道是否这样做)