3

GPS座標を取得するアプリがあります。正常に動作しますが、サービスが実行されているかどうかを呼び出しアクティビティ内からテストしたいです。チェックすると思った次のコードがありますが、通知バーの GPS アイコンがまだ点滅しているときに false が返されます。誰にも理由はありますか?前もって感謝します

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));
4

3 に答える 3

3

LocationService.class.getName()ハードコードされた値を使用する代わりに、と比較する必要があります。また、使用している値はClass#getSimpleName()に対応していますが、これはおそらくここで必要なものではありません。

于 2013-10-17T14:38:42.847 に答える
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;
    }
于 2014-07-05T05:35:49.583 に答える
1

この方法は私にとってはうまく機能し、使いやすいです:

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;   
}
于 2013-10-17T14:43:03.697 に答える