检查服务是否在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 }
}