如何从报警管理器调用活动的功能

问题描述:

我在活动中有一个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

你能否声明它是'静态'方法。 :P Cos然后bob s你的叔叔。 – 2012-02-16 16:44:34

+0

请参阅我的编辑 – Zeck 2012-02-16 16:50:17

不......因为你不能保证你正在尝试的活动来调用甚至会存在,当你onReceive()被调用。

你可以做的是启动Activity使用带有一个额外的Intent指示来电的是你BroadcastReceiver,那么活动可以检查外,并调用该方法。

但是,考虑你看起来想要做什么。我会建议去与Service。由于你是在背景中进行工作,我没有看到在活动中想要这样做的理由(当然,除非你有一个没有显示在这里的有效理由)。

查看我的回答here了解类似的例子。

+0

谢谢。这是一个很好的答案。 :) – Zeck 2012-02-16 17:44:43