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:(。警报管理器有什么办法吗?

谢谢你的每一个建议。

泽克

4

1 回答 1

3

不...因为您无法保证您尝试调用的 Activity 甚至会在您onReceive()被调用时存在。

您可以做的是Activity使用Intent带有 Extra 的 an 开始,表明呼叫者是 you BroadcastReceiver。然后 Activity 可以检查 Extra 并调用该方法。

但是,考虑到您似乎想要做的事情。我建议使用Service. 由于您无论如何都是在后台进行工作,因此我看不出有任何理由要在 Activity 中进行这项工作(当然,除非您有一个未在此处显示的正当理由)。

有关类似内容的示例,请参见我的答案。

于 2012-02-16T17:37:37.030 回答