0

私はアンドロイドに不慣れです。GPSを使用して現在地を取得しようとしています。私は許可を含めました:

<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"/>

使用をやめようとすると、Locationnullオブジェクトが発生します。また、GPSが有効になっています。これが私のコードです:LocationManagergetLastKnownLocation

LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
Location location;
if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
    Log.d("ManualLog", "GPS_DISABLED");
    Intent settingsIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(settingsIntent);
} else {
    Log.d("ManualLog", "GPS_ENABLED");
    location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
}
4

3 に答える 3

2

GPS がまだ修正を取得する時間がない場合、locationManager.getLastKnownLocation は null を返します。Android には、「今すぐ場所を教えて」という方法はありません。GPS が修正されると、onLocationChanged() が実行されます。これはイベント ドリブンです。忍耐強く、そのイベントを待つ必要があります。onLocationChanged() が実行されると、getLastKnownLocation() は null 以外の値を返します。

于 2012-08-19T18:25:19.153 に答える
0

最後の行を次のように置き換えてみてください。

List<String> providers = locationManager.getProviders(true);
if(!providers.isEmpty()) {
    location = locationManager.getLastKnownLocation(providers.get(0));
} else {
   Log.d("ManualLog", "No provider");
}
于 2012-08-19T16:38:38.637 に答える
0

エミュレータまたはデバイスで実行していますか? エミュレーターの場合、「エミュレーター制御」を介して手動で GPS データをエミュレーターに送信する必要がある場合があります。Eclipse では、[ウィンドウ] > [パースペクティブを開く] > [DDMS] で見つけることができます。

デバイスで実行している場合、デバイスが以前に GPS 信号を受信したことがない可能性はありますか?

于 2012-08-19T18:14:18.830 に答える