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 エミュレーターでアプリを実行しています。
何が問題なのですか?
ありがとう。