Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查服务是否在Android上运行?_Android_Android Service - Fatal编程技术网

检查服务是否在Android上运行?

检查服务是否在Android上运行?,android,android-service,Android,Android Service,我想检查一下服务是否在运行 我写了这个密码 public class startServiceOrNo { public static void startServiceIfItsNotRuning(Class<?> class1, Context context) { ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); for

我想检查一下服务是否在运行 我写了这个密码

public class startServiceOrNo {
public static void startServiceIfItsNotRuning(Class<?> class1, Context context) {
    ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if (class1.getName().equals(service.service.getClassName())) {
            Lg.d("servisstart SERVICE ALREADY START" + class1.getName());
            return;
        }
    }
    Lg.d("servisstart SSERVICE NEW SERVIS " + class1.getName());
    context.startService(new Intent(context, class1));
}
公共类startServiceOrNo{
公共静态void startServiceIFitsNotRunning(类class1,上下文){
ActivityManager=(ActivityManager)context.getSystemService(context.ACTIVITY_服务);
for(RunningServiceInfo服务:manager.getRunningServices(Integer.MAX_值)){
if(class1.getName().equals(service.service.getClassName())){
Lg.d(“服务启动服务已经启动”+class1.getName());
返回;
}
}
Lg.d(“服务启动服务新服务”+class1.getName());
startService(新意图(context,class1));
}
并使用它 startServiceOrNo.StartServiceIFitsNotRunning(脱机ChopsMonitor.class,this)


如果我从一个类中检查服务是否有效,但如果我从不同的类中检查相同的服务,其检查不起作用

为什么不让服务本身来解决这个问题

public class MyService extends Service
{
    private boolean mRunning;

    @Override
    public void onCreate()
    {
        super.onCreate();
        mRunning = false;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
        if (!mRunning) {
            mRunning = true;
            // do something
        }
        return super.onStartCommand(intent, flags, startId);
    }
}
1.)在活动课上:

private boolean isMyServiceRunning(Class<?> serviceClass) {
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if (serviceClass.getName().equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}
private boolean IsMyService正在运行(类serviceClass){
ActivityManager=(ActivityManager)getSystemService(Context.ACTIVITY_服务);
for(RunningServiceInfo服务:manager.getRunningServices(Integer.MAX_值)){
if(serviceClass.getName().equals(service.service.getClassName())){
返回true;
}
}
返回false;
}
2.)在非活动类(广播接收器)中:

private boolean isMyServiceRunning(类serviceClass,上下文){
ActivityManager=(ActivityManager)context.getSystemService(context.ACTIVITY_服务);
for(RunningServiceInfo服务:manager.getRunningServices(Integer.MAX_值)){
if(serviceClass.getName().equals(service.service.getClassName())){
Log.i(“服务已经”、“正在运行”);
返回true;
}
}
Log.i(“服务未运行”);
返回false;
}

我在活动中使用以下内容:

private boolean isMyServiceRunning(Class<?> serviceClass) {
  ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
  for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
    if (serviceClass.getName().equals(service.service.getClassName())) {
        return true;
    }
  }
  return false;
}
private boolean IsMyService正在运行(类serviceClass){
ActivityManager=(ActivityManager)getSystemService(Context.ACTIVITY_服务);
for(RunningServiceInfo服务:manager.getRunningServices(Integer.MAX_值)){
if(serviceClass.getName().equals(service.service.getClassName())){
返回true;
}
}
返回false;
}

检查服务是否正在运行 如果我的案例:
OpenVPNService.class
是我的服务类

if (isMyServiceRunning(OpenVPNService.class)) {
                success_txt.setVisibility(View.VISIBLE);
            } else {
                success_txt.setVisibility(View.GONE);
            }





 private boolean isMyServiceRunning(Class<?> serviceClass) {
        ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
            if (serviceClass.getName().equals(service.service.getClassName())) {
                return true;
            }
        }
        return false;
    }
if(ismyservicerrunning(OpenVPNService.class)){
success_txt.setVisibility(View.VISIBLE);
}否则{
success_txt.setVisibility(View.GONE);
}
专用布尔值isMyServiceRunning(类serviceClass){
ActivityManager=(ActivityManager)getSystemService(Context.ACTIVITY_服务);
对于(ActivityManager.RunningServiceInfo服务:manager.getRunningServices(Integer.MAX_值)){
if(serviceClass.getName().equals(service.service.getClassName())){
返回true;
}
}
返回false;
}

您可以在Kotlin中使用此方法

fun Activity.isServiceRunning(serviceClassName: String): Boolean {
    val manager = getSystemService(ACTIVITY_SERVICE) as ActivityManager
    return manager.getRunningServices(Integer.MAX_VALUE).any { it.service.className == serviceClassName }
}

您想要什么?是否要检查服务是否正在运行?请检查此项,但如何从您的意图中访问您的服务对象?如何从其他活动/片段中使用此项检查服务是否正在运行?@IgorGanapolsky您不必使用静态变量?回答无效。什么当服务终止时退出?请注意getRunningServices已被弃用。感谢您将其划分为活动和非活动。这使我的工作更轻松。ActivityManager.getRunningServices已被弃用
fun Activity.isServiceRunning(serviceClassName: String): Boolean {
    val manager = getSystemService(ACTIVITY_SERVICE) as ActivityManager
    return manager.getRunningServices(Integer.MAX_VALUE).any { it.service.className == serviceClassName }
}