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

时间:2012-02-16 16:37:40

标签: android android-activity android-alarms

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

感谢您的一切建议。

泽克

1 个答案:

答案 0 :(得分:3)

否...因为您无法保证在调用onReceive()时,您尝试呼叫的活动甚至会存在。

您可以做的是使用带有Extra的Activity Intent开始BroadcastReceiver,表示来电者是Service。然后,Activity可以检查Extra并调用该方法。

然而,考虑一下你似乎想做什么。我建议使用{{1}}。因为你正在后台进行工作,所以我没有理由想在活动中做这件事(当然,除非你有正当理由在这里没有显示)。

请参阅我的回答here,了解类似的例子。