0

デバイスの GPS がオンになっているかどうかを検出しようとしています。

現在、ブール値の true または false 値を返すだけで、コードを続行するか、ユーザーを GPS 設定に誘導します。

ブール値を返すと、コードがクラッシュします。私はそれをデバッグしましたが、値を返すため、まだ理由がわかりません。

コードは次のとおりです。

  GPSYesOrNo g = new GPSYesOrNo(this);

  check = g.checkStatus();
  // check if GPS enabled
  if (check == true) {
     Intent Appoint = new Intent("com.example.flybaseapp.appointmantMenu");
     startActivity(Appoint);
  } else {  
     alert();
  }

GPSYesOrNo クラス:

public class GPSYesOrNo {
   Context cc;
   private LocationManager locationManager;
   boolean enable;

   public GPSYesOrNo(Context c) {
      this.cc = c;
      checkStatus();
   }

   public boolean checkStatus() {
      locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
      boolean enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 

      if (enabled) {
         return true;
      } else {
         return false;
      }
   }
}

誰が私が間違っているのかを見ることができますか?

4

2 に答える 2

4

比較ではなく、有効に割り当てています:

if(enable = true)

代わりに変更すると==、うまくいくはずです。他の人が言ったように、また、if (enable)ずっときれいに見えるでしょう.

アップデート:

新しい情報では、 isProviderEnabled を呼び出しているときに locationManager が null のようです。checkStatus() を呼び出す前に、正しく設定されていることを確認してください。

于 2013-03-11T20:51:58.753 に答える
1

Activity を拡張するべきではありません。locationManager を取得できるようにコンテキストを渡すだけです。とにかく、コンテキストパラメーターでコンストラクターを呼び出さないため、アプリがクラッシュしました。したがって、cc はヌルです。ちなみに getSystemService(cc.LOCATION_SERVICE) は getSystemService(Context.LOCATION_SERVICE) である必要があります

変化する

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);  

locationManager = (LocationManager) cc.getSystemService(Context.LOCATION_SERVICE);
于 2013-03-11T22:51:23.387 に答える