0

私は Android 開発にかなり慣れていませんが、速度を上げるために開発しようとしているアプリで奇妙な問題に遭遇しています。時々、このアプリは正常に動作しているように見えますが、ほとんどの場合、動作しません。アプリからデバイスの GPS 緯度/経度を単純に設定しようとしています。本当にそれ以上のものはありません。他の投稿から集めた多くの知識を活用しましたが、最終的には、エミュレーターの癖が原因でアプリが機能しないのか、それとも私のコードなのかわかりません。参考までに、私は IntelliJ を使用しており、2.3.3 をターゲットにしています。実際にエミュレータで GPS を有効にしており、実際にマニフェストで適切なアクセス許可を設定しています。

奇妙なことに、エミュレーターを開いたときに正常に動作することがあり、端末経由で telnet を実行し、「geo fix」で地理位置情報を設定してからアプリに戻ると、入力した GPS の緯度/経度が表示されます。しかし、通常はまったく機能しません。コード内のモックロケーションを介してプログラムで実行しようとすると、同じような結果が得られます。

onCreate() メソッドの上部にあるコードは次のとおりです (locationManager はクラスレベルのフィールドです)。

    locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
    locationManager.addTestProvider(LocationManager.GPS_PROVIDER, false, false, false, false, false, true, true, 0, 5);

..そして、ユーザーが緯度/経度を UI に入力して送信ボタンをタップすると、フィールドが抽出されて軽い検証が行われた後に次のコードが呼び出されます。

Location mLocation = new Location(LocationManager.GPS_PROVIDER);
mLocation.setLatitude(Float.valueOf(inputLat));
mLocation.setLongitude(Float.valueOf(inputLong));
mLocation.setTime(System.currentTimeMillis());

locationManager.setTestProviderEnabled(LocationManager.GPS_PROVIDER, true);
locationManager.setTestProviderLocation(LocationManager.GPS_PROVIDER, mLocation);

refreshTheLocation();

参考までに、refreshTheLocation() メソッドは次のとおりです。

public void refreshTheLocation() {
    LocationResult locationResult = new LocationResult(){
        @Override
        public void gotLocation(Location location){
            final Location finalLoc = location;

            if (location != null) {
                runOnUiThread(new Runnable() {
                    public void run() {
                        TextView gpsTextView = (TextView) findViewById(R.id.gps_label);
                        gpsTextView.setText("GPS DATA FOUND:\nLatitude: " + finalLoc.getLatitude() + "\nLongitude: " + finalLoc.getLongitude());
                     }
                });
            } else {
                runOnUiThread(new Runnable() {
                   public void run() {
                      TextView gpsTextView = (TextView) findViewById(R.id.gps_label);
                      gpsTextView.setText("GPS data not found");
                   }
                });
            }
        }
   };
   MyLocation myLocation = new MyLocation();
   myLocation.getLocation(this, locationResult);
}  

「MyLocation」クラスは、この投稿の最高評価の回答からコピー/貼り付けしたものです。

Androidでユーザーの現在地を取得する最も簡単で堅牢な方法は何ですか?

私の問題が何であるかについて何か考えはありますか?約 1/5 の場合、GPS 座標を取得して表示しますが、残りの 4/5 の場合は表示しません。そして、それが機能する場合、入力フィールドとボタンを介して座標を変更しても、座標が更新されることはありません。

私はこのようなことにかなり慣れていないので、気楽に行ってください。;) 皆さんが提供できる助けを前もって感謝します!

4

1 に答える 1

1

2.3.3 バージョンを対象としていて、2.3.3 バージョンの AVD でテストしている場合は、API の 2.3.3 Google API バージョンに切り替えてから、モックの場所を試すことをお勧めします。

于 2012-07-26T03:06:46.577 に答える