我正在尝试创建以下发布的方法来检查服务是否正在运行。但是getSystemService()标记为红色,因为未定义 它需要一个上下文。我使用了以下内容:
Application.getContext().getSystemService
但仍未定义getContext。
在代码中,我执行以下操作:
if (ServicesUtils.isServiceRunning(NonStickyService.class.getSimpleName())) {
Log.i(TAG, "++++++++++ SERVICE IS RUNNING +++++++++");
} else {
Log.i(TAG, "++++++++++ SERVICE IS NOT RUNNING +++++++++");
}
请让我知道我应该使用哪个上下文。
代码1 :
public class ServicesUtils {
private static String LOG_TAG = ServicesUtils.class.getName();
public static boolean isServiceRunning(String serviceClassName) {
final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
final List<ActivityManager.RunningServiceInfo> services = activityManager.getRunningServices(Integer.MAX_VALUE);
for (ActivityManager.RunningServiceInfo runningServiceInfo : services) {
if (runningServiceInfo.service.getClassName().equals(serviceClassName)) {
return true;
}
}
return false;
}
}
代码2 :
public class App extends Application {
public static com.example.pc_amr.stickyvsnonstickyservice.App instance;
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
public static com.example.pc_amr.stickyvsnonstickyservice.App getInstance() {
return instance;
} // get the instance
}
答案 0 :(得分:1)
由于getSystemService
是Context
的一部分。而且您的class
与context
没有任何关系。因此,您必须制作一个Context
的对象,然后才能使用context.getSystemService
。并确保使用context
传递constructor
的值来避免{{1 }}。
您可以这样做
NPE
答案 1 :(得分:0)
尝试创建Application
类的静态实例:
public class App extends Application {
public static App instance;
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
public static App getInstance() { return instance; } // get the instance
}
现在,如果您需要上下文,则只需使用App.getInstance()
。我们知道Application类扩展了Context。
记住要注册App类