0

Android Fused Location API に問題があります。場所を定期的に受信する必要がある IntentListener サービスがあります。GoogleApiClient を正常に作成して接続し、PendingIntent を介して位置情報の更新を受け取るように要求しますが、呼び出すたびにGeofencingEvent.getTriggeringLocation戻り値が常に null になります。

コードは次のとおりです。

private void createLocationRequest() {
    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(INTERVAL);
    mLocationRequest.setFastestInterval(FASTEST_INTERVAL);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
}

private void startLocationListener(Context context) {
    if (!isGooglePlayServicesAvailable(context)) {
        Log.d(TAG, "No Google Play Services.");
        return;
    }

    createLocationRequest();
    mGoogleApiClient = new GoogleApiClient.Builder(context)
            .addApi(LocationServices.API)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();

    mGoogleApiClient.connect();
    }

private void startLocationUpdates(Context context) {
    Intent i = new Intent(context, IntentListener.class);
    PendingIntent pi = PendingIntent.getService(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);

    com.google.android.gms.common.api.PendingResult<Status> pendingResult = LocationServices.FusedLocationApi.requestLocationUpdates(
            mGoogleApiClient, mLocationRequest, pi);
    Log.d(TAG, "Location update started ..............: ");
}

@Override
protected void onHandleIntent(Intent intent) {
    Log.d(TAG, "INTEEENT");
    String action = intent.getAction();

    if(Actions.ACTION_START_INTENT_LISTENER.equals(action)) {
        init(this);
    }
    else {
        GeofencingEvent event = GeofencingEvent.fromIntent(intent);
        if(event == null) Log.d(TAG, "Null event");
        if(event.getTriggeringLocation() == null) Log.d(TAG, "null location"); // **<-- PROBLEM HERE**
        if (event == null || event.getTriggeringLocation() == null) {
            return;
        }

        Location location = event.getTriggeringLocation();
        Log.d(TAG, "LocationC: " + location.getLatitude() + ", " + location.getLongitude());
    }
}

そして、これがマニフェストです

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.srn.app.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <service android:enabled="true" android:name="com.srn.app.IntentListener"></service>
</application>

<meta-data
    android:name="com.google.android.gms.version"
    android:value="@integer/google_play_services_version" />

Android 5.1 がインストールされた x86 エミュレーターでアプリを実行しています。

何が問題なのですか?

ありがとう。

4

1 に答える 1

1

Geofencing API は、GeofencingApi.addGeofences()を介して明確に登録する必要があります。requestLocationUpdates()実行中の呼び出しから実際に位置情報を取得したい場合は、 LocationResult.extractResult()を の代わりに使用する必要がありGeofencingEvent.fromIntent()ます。

古いバージョンの Google Play サービスの代替手段は、キーKEY_LOCATION_CHANGEDを使用して、インテントから 1 つの場所だけを抽出することです。

Location location = intent.getParcelableExtra(
    LocationServices.FusedLocationProviderApi.KEY_LOCATION_CHANGED);
于 2015-06-18T21:42:41.207 に答える