2013-10-17 2 views
2

GPS 좌표를받는 앱이 있습니다. 그것은 잘 작동하지만 서비스가 실행중인 경우 호출 활동 내에서 테스트 싶어요. 나는 체크 할 것이라고 생각하는 다음 코드를 가지고 있지만 알림 바의 GPS 아이콘이 여전히 깜빡이면 false를 반환하고있다. 누구에게 어떤 아이디어가 있었습니까? 미리 감사드립니다.android 서비스가 실행 중인지 확인하는 방법

private boolean isGpsServiceRunning() { 
      ActivityManager manager = (ActivityManager)getSystemService(ACTIVITY_SERVICE); 
      for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
      if ("LocationService".equals(service.service.getClassName())) { 
       return true; 
      } 
      } 
      return false; 
     } 

.

LocalBroadcastManager.getInstance(getApplicationContext()) 
          .registerReceiver(
            locationChangereceiver, 
            new IntentFilter(
              LocationChangeIntent.ACTION_LOCATION_CHANGE)); 
        startService(new Intent(this, LocationService.class)); 
+0

것은 그 어느 true를 돌려 않음 :이 방법은 나를 위해 잘 작동하고 사용하기 쉬운 –

+0

방금 ​​고정되었으므로 패키지 이름을 넣어야했습니다. 네가 말하는 것과 같은거야. 대답을 만들고 받아 들일 것입니다. 감사합니다 – turtleboy

+0

좋아, 완료 :) –

답변

3

하드 코딩 된 값 대신에 LocationService.class.getName()과 비교해야합니다. 또한 사용중인 값은 Class#getSimpleName()에 해당합니다. 여기서는 원하는 값이 아닐 수 있습니다.

private boolean isMyServiceRunning() { 
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 

    Log.i(TAG,"MyService.class.getName() = "+ButtonOnBootService.class.getName());    

    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 

     Log.i(TAG,"service.getClassName() = " +service.service.getClassName()); 

     if (ButtonOnBootService.class.getName().equals(service.service.getClassName())) { 
      return true; 
     } 
    } 
    return false; 
} 
1

? 실행중인 모든 서비스를 인쇄하여 잘못된 값을 찾고 있지 않은지 확인하려고 했습니까? 또한, 하드 코딩 대신 LocationService.class.getSimpleName()을 사용하는 것이 좋습니다.
+1

service.uid == Process.myUid()와 같은 검사를 추가 할 수 있습니다. 이렇게하면 동일한 응용 프로그램을 무료/유료 버전으로 동시에 실행하는이 문제가 발생하지 않을지라도 검색 속도가 빨라지고 다른 프로세스에서 서비스를 찾는 것을 피할 수 있습니다! – 3c71

+0

감사합니다. 나는 그것을 조사 할 것이다. 어떤 방식 으로든 안드로이드 속도를 높이면 유용합니다. – bofredo

2
public boolean check(){ 
    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) 
      { 
       if ("com.example.yourpackagename.YourserviceName" 
         .equals(service.service.getClassName())) 
       { 
        return true; 
       } 
      } 
     return false; 
    } 
관련 문제