目標: 一度 GPS 位置を特定し、緯度/経度を 2 つの個別の EditText ボックスに配置して、ユーザーに表示します。
問題: 自分の方法をテストしたところ、エミュレータで問題なく動作しました。GPS 座標を送信したところ、問題なく動作しました。2 つの別々のデバイス (v2.1 電話、v4.0 ICS タブレット) で試してみると、GPS アイコンが通知に表示されます (すべて問題ありません) が、場所を特定しようとしてそこにとどまります。私はそれを何度もテストし、テストするたびに十分な時間を与えました. 編集:外に出たときに電話で問題なく動作するので、これを消すことができます。タブレットにはまだ問題があります。
私はブリスベンの真ん中にいるので、位置の問題だとは思えません。さらに、Google マップは GPS 経由で私の位置を特定する際に問題なく機能します。
GPS をオフにして、デフォルトでネットワークの位置情報に戻すと、うまく機能し、位置情報が得られます。
メソッド:
(私が呼び出すメソッド);
public void locateCoordinates(EditText latitudeInput, EditText longitudeInput) {
// Find coordinates, place them in EditText boxes.
// Create the locating services if needed
if(locManager == null) {
locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
}
if(locListener != null) {
// Unregister listener from locManager (in case of double click of Locate button)
locManager.removeUpdates(locListener);
}
locListener = new LocListenerImpl(locManager, latitudeInput, longitudeInput);
if(locManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
locManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 0, 0, locListener);
} else if(locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
locManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 0, 0, locListener);
Toast.makeText(this,
"GPS unavailable, trying network-based location instead.",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this,
"No locating methods enabled", Toast.LENGTH_SHORT).show();
}
}
(リスナー実装クラス);
public class LocListenerImpl implements LocationListener {
private LocationManager locManager = null;
private EditText latitudeInput = null;
private EditText longitudeInput = null;
public LocListenerImpl(LocationManager locManager, EditText latitudeInput, EditText longitudeInput) {
this.latitudeInput = latitudeInput;
this.longitudeInput = longitudeInput;
this.locManager = locManager;
}
public void onLocationChanged(Location location) {
if(location != null) {
latitudeInput.setText(String.valueOf(location.getLatitude()));
longitudeInput.setText(String.valueOf(location.getLongitude()));
locManager.removeUpdates(this); // Location found, unregister listener
}
}
public void onProviderDisabled(String provider) {}
public void onProviderEnabled(String provider) {}
public void onStatusChanged(String provider, int status, Bundle extras) {}
}
何が間違っていたのか、何が原因なのか分からず困っています。どんな助けでも大歓迎です!