Android 如何调用活动';报警管理器的s功能

Android 如何调用活动';报警管理器的s功能,android,android-activity,android-alarms,Android,Android Activity,Android Alarms,我在活动中有一个startApplicationService方法。因此,我有一个报警管理器startApplicationService方法正在调用后台服务。我想在报警管理器的onReceive方法中使用/调用该方法。怎么做?请帮帮我。:) 编辑:添加报警管理器类: public class WatcherAlarm extends BroadcastReceiver { private final static String LOG_TAG = WatcherAlarm.clas

我在活动中有一个
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);
    }
}
下面是my
startApplicationService
方法:它正在启动异步任务

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();
    }
}
我试图从上下文中获取活动。但这是不可能的(.有没有办法从alarm manager中说
调用startApplicationService方法到activity

谢谢你的建议


Zeck

否…因为您无法保证在调用您的
onReceive()
时,您试图调用的活动是否存在

您可以做的是使用
意图
启动
活动
,并附加一个指示调用者是您的
广播接收者
。然后活动可以检查该附加值并调用该方法

但是,考虑到您似乎想要做什么。我建议您使用
服务
。因为您是在后台进行工作的,所以我看不到希望在活动中这样做的理由(当然,除非您有一个在此未显示的有效理由)


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

否…因为您无法保证在调用您的
onReceive()
时,您试图调用的活动是否存在

您可以做的是使用
意图
启动
活动
,并附加一个指示调用者是您的
广播接收者
。然后活动可以检查该附加值并调用该方法

但是,考虑到您似乎想要做什么。我建议您使用
服务
。因为您是在后台进行工作的,所以我看不到希望在活动中这样做的理由(当然,除非您有一个在此未显示的有效理由)


查看我的答案,以获得类似的示例。

你能将其声明为
静态
方法吗。:p因为bob是你的叔叔。你能将其声明为
静态
方法吗。:p因为bob是你的叔叔。谢谢。这是一个很好的答案。:)谢谢。这是一个很好的答案