2012-02-16 54 views
0

我在活動中有一個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

回答

3

不......因爲你不能保證你正在嘗試的活動來調用甚至會存在,當你onReceive()被調用。

你可以做的是啓動Activity使用帶有一個額外的Intent指示來電的是你BroadcastReceiver,那麼活動可以檢查外,並調用該方法。

但是,考慮你看起來想要做什麼。我會建議去與Service。由於你是在背景中進行工作,我沒有看到在活動中想要這樣做的理由(當然,除非你有一個沒有顯示在這裏的有效理由)。

查看我的回答here瞭解類似的例子。

+0

謝謝。這是一個很好的答案。 :) – Zeck 2012-02-16 17:44:43