我试图检测设备上的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;
}
}
}
谁能看到我哪里出错了?
答案 0 :(得分:4)
您要分配启用,而不是比较:
if(enable = true)
改为将其更改为==
,您应该做得很好。像其他人说的那样,if (enable)
看起来会更清洁。
<强>更新强>
使用新信息,当您在其上调用isProviderEnabled时,您的locationManager似乎为null。在调用checkStatus()之前验证它是否设置正确。
答案 1 :(得分:1)
你不应该扩展Activity,只需传入一个上下文就可以获得一个locationManager。无论如何,您的应用程序崩溃了,因为您没有使用context参数调用构造函数。因此cc为空。顺便说一下getSystemService(cc.LOCATION_SERVICE)应该是getSystemService(Context.LOCATION_SERVICE)
更改
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
到
locationManager = (LocationManager) cc.getSystemService(Context.LOCATION_SERVICE);