在我的主要活动中,我有这个方法:
public void CancelAlarms() {
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmReceiver.class);
pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
manager.cancel(pendingIntent);
}
但我想在我的其他活动中调用它。
如何将其从一个活动调用到另一个活动?另外,如果我在方法中使用上下文,它会没用吗?如果我将其从另一个活动称为这个,那么上下文会改变吗?
答案 0 :(得分:1)
如果要在所有Activity中使public void CancelAlarms()
可用,那么创建一个Base Activity类实现此方法,该Activity现在扩展所有Activity with Base Activity类,而不是从任何已扩展的Activity调用此方法基本活动。或者将public void CancelAlarms()
方法放在Application类中。现在使用getApplicationContext()
,您可以在任何活动或服务中调用此方法。
答案 1 :(得分:1)
您可能应该将此方法移至实用程序类或基本Activity
类,这正是您提到的原因:它取决于Context
。
你只是不会能够在没有引用它所在的Activity实例的情况下调用此方法,因为它没有标记为static
。即使你这样做,它也会使用它的主机Activity
- 可能不是你想要的。
相反,您可以创建一个包含该方法的实用程序类。有两种方法可以解决这个问题:你可以每次都将Context
传递给函数,或者你可以将Context
一次传递给类的构造函数。对于分组为Utilities
类的一次性便捷方法,前者可能更好,而后者更像Java,如果类具有明确的功能(如ActivityAlarmWrangler
)则更好
最后,您可以将该函数移动到基类。对于简单的情况,这将是最干净的,因为您Activity
中不必具有不同的成员对象,但如果您的Activity
已经扩展了自定义超类,则您将无法使用此方法,除非您愿意修改超类。因为Java没有多重继承(在这种情况下会很有用),继承这个方法可能会很快变得毛茸茸。
答案 2 :(得分:0)
在主要活动中创建/的静态实例。
static MainActivity mainActivity;
在oncreate方法中初始化
@覆盖
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(....);
mainActivity = this;
}
并创建一个返回此实例的方法。
public static MainActivity getInstance(){
return mainActivity;
}
现在,从其他活动中,您只需按以下方式调用您的方法:
MainActivity.getInstance()CancelAlarms();