您好我目前正在嘗試使用GoogleApiClient獲取我的Android設備的緯度和高度值。我一直在這裏跟隨指南:Android:使用GoogleApiClient時的空位置
GoogleApiClient: Last Known Location Guide
我也想從我的服務,而不是活動做到這一點,這裏是我的代碼以供參考片段:
public class AppService extends Service implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
private GoogleApiClient googleApiClient;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public int onStartCommand(final Intent intent, int flags, int startId) {
if (googleApiClient == null) {
googleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
googleApiClient.connect();
try {
Location lastLocation = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
Log.d("location", String.valueOf(lastLocation.getLatitude()));
Log.d("location", String.valueOf(lastLocation.getLongitude()));
} catch (SecurityException e) {
Log.e("Location error", "Location object is null.");
}
googleApiClient.disconnect();
//Stop service once it finishes its task
stopSelf();
return Service.START_STICKY;
}
@Override
public void onConnected(@Nullable Bundle bundle) {
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
}
每次我嘗試訪問Location變量來獲取緯度和高度時,我都會得到一個NullPointerException,爲什麼?
還希望包括我的AndroidManifest文件,以防萬一,我有所需的權限,據我所知:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="app"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application android:label="@string/app_name" >
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</activity>
<receiver
android:name=".AutoStart"
android:enabled="true" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
<service android:name=".AppService"/>
</application>
</manifest>
您是否使用運行時權限? –
如果我的應用程序沒有用戶界面,這會工作嗎?該應用程序旨在作爲後臺服務運行。 – Tuco