我正在构建一个通过 AlarmManager 触发警报的应用程序。
我希望能够通过它自己的非活动类调用警报,但由于我没有扩展活动,我似乎没有任何“上下文”。这个概念让我很困惑,我已经阅读了 sdk 文档。
我将如何使用:
alarmTest = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
在我的非活动课上?
另外,我假设获取上下文将允许我在我的非活动类中使用 SharedPrefs 和 Intents 吗?
我正在构建一个通过 AlarmManager 触发警报的应用程序。
我希望能够通过它自己的非活动类调用警报,但由于我没有扩展活动,我似乎没有任何“上下文”。这个概念让我很困惑,我已经阅读了 sdk 文档。
我将如何使用:
alarmTest = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
在我的非活动课上?
另外,我假设获取上下文将允许我在我的非活动类中使用 SharedPrefs 和 Intents 吗?
您可以将上下文传递给非活动类,这是首选方式,或者您可以将应用程序的基本上下文封装到单例中,这样您就可以在应用程序中的任何位置访问上下文。在某些情况下,这可能是一个很好的解决方案,但在其他情况下,它肯定不是一个好的解决方案。
无论如何,如果您想通过触发警报,AlarmManager
我很确定警报应该继承自 aService
或更好,并且在这种情况下,您可以通过orIntentService
访问上下文this.getBaseContext()
this.getApplicationContext()
Service
并Activity
继承自Context
——所以当你getSystemService
在这些类中调用时,你真的在调用super.getSystemService
.
如果你想Context
在另一个类中有一个可用的,你可以将一个作为参数传递给该类的方法,保留对它的引用等。
编辑:代码示例。但说真的,这是非常基础的——如果你了解继承和方法的话。
class MyActivity extends Activity { // Activity extends Context, so MyActivity also extends Context
void someMethod() {
MyOtherClass.useStaticContext(this);
MyOtherClass instance = new MyOtherClass();
instance.useInstanceContext(this.getApplicationContext());
}
}
class MyOtherClass {
static void useStaticContext(Context context) {
}
void useInstanceContext(Context context) {
}
}
您可以尝试以下操作,它允许您获取视图正在运行的当前上下文。
alarmTest = (AlarmManager)this.getContext().getSystemService(Context.ALARM_SERVICE);
您需要将上下文传递给非活动类。
在活动中使用它:
private Context context = this;
........
if(Utils.isInternetAvailable(context){
Utils.showToast(context, "toast");
}
..........
在实用程序中:
public class Utils {
public static boolean isInternetAvailable(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
return cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected();
}
public static void showToast(Context context, String text) {
Toast toast = Toast.makeText(context, text, Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
}