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 似乎为空。在调用 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 回答