2

似たような質問がたくさん出回っていることは承知していますが、私の検索では適切な回答が見つかりませんでした。

私のアプリには、機能するために GPS 位置情報に依存するアクティビティがあります。場所が null の場所で null ポインタ例外などにより、起動直後に実行するとアプリがクラッシュします。これらは私のプログラミング エラーであることは認識しており、例外を処理する必要がありますが、GPS の修正が見つかるまでアクティビティは役に立ちません。

アプリがクラッシュすると、「GPS を検索中」アイコンが表示されます。これが十分に長く放置されていれば、GPS の場所が見つかり、アプリを問題なく実行できます。

ホーム画面として機能する別のアクティビティを作成しました。これにより、GPS の場所が見つかったときにボタンが上記のアクティビティにリンクできるようになります。問題は、GPS 信号が見つからない、または探しているように見えないことです。これは、「GPS を検索中」アイコンが表示されず、ボタンが有効にならないことを意味します。このホーム アクティビティのコードは以下のとおりです。

私のアクティビティは LocationListener を実装しており、以下のコードはアクティビティの「onCreate」メソッドにあります。「startExplore」は GPS に依存するアクティビティを開始します。

    exploreButton = (Button) findViewById(R.id.button1);

    exploreButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            startExplore();
        }
    });

    // Get the location manager
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    // Define the criteria how to select the location provider -> use
    Criteria criteria = new Criteria();
    provider = locationManager.getBestProvider(criteria, false);
    Location location = locationManager.getLastKnownLocation(provider);

    // Initialize the location fields
    if (location != null) {
      System.out.println("Provider " + provider + " has been selected.");
      onLocationChanged(location);
    } else {
        exploreButton.setEnabled(false);
        exploreButton.setText("Finding location . . .");
    }

これが私の「onLocationChanged」メソッドです。上記のように、他のアクティビティとは異なり、「GPS を検索中」アイコンが表示されず、他のアクティビティで使用されているのと同じ方法であるにもかかわらず、場所が見つからないようです。では、これは場所が見つかるまで待つための正しい手法であり、間違いを特定できる人はいますか?

public void onLocationChanged(Location location) {
    exploreButton.setEnabled(true);
    exploreButton.setText("Found signal");

}
4

2 に答える 2

1

に電話し locationManager.requestLocationUpdates(locationProvider, 0, 0, this) て更新された位置を取得してください..それが問題の原因である可能性があります..このため、「GPS の検索」のみが開始されなかったと思います..

于 2013-11-09T16:56:15.677 に答える
0

それを onCreate メソッドの外に移動するか、ハンドラーなどに入れます。

例:

    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
      @Override
      public void run() {
          //methods you want.
      }
    }, 100);
于 2013-11-09T16:28:37.697 に答える