2

GCM 通知を受信したときに、Android でユーザーの位置を取得したいと考えています。
だから私の中で私GCMIntentService extends GCMBaseIntentServiceはこれをやっています:

   @Override
    protected void onMessage(Context context, Intent intent) {
        Log.i(TAG, "Received message. Extras: " + intent.getExtras());
        String message = getString(R.string.gcm_message);
        displayMessage(context, message);
        syncLocations(context);

    }

syncLocation では、場所を取得するために正しくやっています

public void syncLocations(Context context)
    {

        locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);

            locationManager.requestLocationUpdates(
                    LocationManager.GPS_PROVIDER, 0, 0,
                    mLocationListener);
            locationManager.requestLocationUpdates(
                    LocationManager.NETWORK_PROVIDER, 1000, 0,
                    mLocationListener);

    }
    public LocationListener mLocationListener   = new LocationListener() {
        @Override
        public void onStatusChanged(
                String provider,
                int status,
                Bundle extras)
        {}

        @Override
        public void onProviderEnabled(
                String provider)
        {}

        @Override
        public void onProviderDisabled(
                String provider)
        {}

        @Override
        public void onLocationChanged(
                Location location)
        {
//HANDLE LOCATION
        }
    };

アプリ内から呼び出された場合、syncLocation は正しく機能します。

しかし、通知onMessage()から呼び出すと、メソッドに入りますが、onLocationChangedは呼び出されません。文脈と関係があると思います。

なぜ機能しないのか、誰か情報を教えてください。
ありがとう

4

1 に答える 1

3

なぜ機能しないのか、誰か情報を教えてください。

GCMIntentServiceは であり、戻った直後にIntentService(経由で) 消えます。からの場所の変更に対してリスナーを登録するなどのことを確実に行うことはできません。stopSelf()onMessage()IntentService

また、GCM メッセージが着信したときにデバイスがスリープ状態になっている可能性があることに注意GCMIntentServiceしてください。onMessage()onMessage()

于 2013-03-30T15:27:52.607 に答える