我在活动中有一个startApplicationService
方法。因此,我有一个报警管理器。 startApplicationService
方法正在调用后台服务。我想在我的报警管理器中使用/调用onReceive
方法中的方法。怎么做?请帮我。 :)
已编辑:已添加警报管理员课程:
public class WatcherAlarm extends BroadcastReceiver
{
private final static String LOG_TAG = WatcherAlarm.class.getSimpleName();
private AccessActivity activity = null;
@Override
public void onReceive(Context context, Intent intent)
{
Log.d(LOG_TAG, "-------------------------- WATCHER ALARM ------ ON RECEIVE");
if(activity != null) {
activity.startApplicationService(intent.getExtras());
}
}
public void startAlarm(AccessActivity activity, Bundle bundle)
{
this.activity = activity;
AlarmManager alarmManager = (AlarmManager) activity.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(activity, WatcherAlarm.class); // explicit
i.putExtras(bundle);
PendingIntent pi = PendingIntent.getBroadcast(activity, 0, i, 0);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 20, pi); // Millisec * Second * Minute
}
public void stopAlarm(Context context)
{
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, WatcherAlarm.class); // explicit
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
alarmManager.cancel(pi);
}
}
这是我的startApplicationService
方法:它正在启动AsyncTask。
public void startApplicationService(Bundle bundle)
{
try {
task = new ApplicationServiceTask(this);
requestId = task.execute(bundle).get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
我试过从上下文获取活动。但这是不可能的。 :(。有没有办法从警报管理器说出call startApplicationService method to activity
?
感谢您的一切建议。
泽克
答案 0 :(得分:3)
否...因为您无法保证在调用onReceive()
时,您尝试呼叫的活动甚至会存在。
您可以做的是使用带有Extra的Activity
Intent
开始BroadcastReceiver
,表示来电者是Service
。然后,Activity可以检查Extra并调用该方法。
然而,考虑一下你似乎想做什么。我建议使用{{1}}。因为你正在后台进行工作,所以我没有理由想在活动中做这件事(当然,除非你有正当理由在这里没有显示)。
请参阅我的回答here,了解类似的例子。