-2

我对这段代码有疑问:

boolean gpsStatus = locmanager.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (!gpsStatus) {
    Settings.Secure.putString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED, "network,gps");
}

我在这里找到了它:https : //stackoverflow.com/a/10004614/2628458 我试图用“LocationManager”切换“locmanager”,但没有奏效。它说:“无法从 LocationManager 类型中对非静态方法 isProviderEnabled(String) 进行静态引用。”

我该如何解决这个问题?

4

2 回答 2

0

您收到错误消息是因为您更改了对对象实例的引用:

locManager

对类的引用:

LocationManager

对类的引用是静态的。 要理解这意味着什么,请将类 LocationManager 视为一个千篇一律的切割器,并且将对象与locManager1locManager2视为由该切割器创建的 cookie。

似乎很明显,饼干切割器不能吃(消耗)它创建的饼干。同样,Java 不允许您从 cookie 切割器引用(或使用)cookie 上的方法。

为什么是这样?因为 cookie 包含状态,而 cookie 切割器没有。饼干可以是绿色的(如果你在里面放绿色食用色素)。那是 cookie 的状态,而不是 cookie 切割器。您不能getColor在 cookie 切割器上调用方法,除非您首先将 cookie 的引用交给它。 曲奇刀没有颜色。

阅读static, 对象和实例。

于 2013-07-28T23:44:34.573 回答
0

如果要打开gps,可以使用以下代码

String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);

if(!provider.contains("gps")){
final Intent intent = new Intent();
intent.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider"); 
intent.addCategory(Intent.CATEGORY_ALTERNATIVE);
intent.setData(Uri.parse("3")); 
sendBroadcast(intent);

和近距离的GPS

String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);

if(provider.contains("gps")){
final Intent intent = new Intent();
intent.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider");
intent.addCategory(Intent.CATEGORY_ALTERNATIVE);
intent.setData(Uri.parse("3")); 
sendBroadcast(intent);
于 2013-07-28T22:54:08.637 回答