未定义getSystemService()

时间:2018-07-25 18:04:19

标签: android service

我正在尝试创建以下发布的方法来检查服务是否正在运行。但是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
}

2 个答案:

答案 0 :(得分:1)

由于getSystemServiceContext的一部分。而且您的classcontext没有任何关系。因此,您必须制作一个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类