onProviderDisabled - 区分提供者

Wra*_*Lux 0 android

public void getCurrentLocation(){

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

     LocationListener locationListener = new LocationListener() {
        public void onLocationChanged(Location location) {
         //
        }

        public void onStatusChanged(String provider, int status, Bundle extras) {

        }

        public void onProviderEnabled(String provider) {}

        public void onProviderDisabled(String provider) {
            if(provider=="gps"){
            Toast.makeText(getApplicationContext(), "GPS is off", Toast.LENGTH_LONG).show();

            startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
            }
            Log.i("lm_disabled",provider);
        }
      };

  locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0, locationListener);
  locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0, locationListener);
}
Run Code Online (Sandbox Code Playgroud)

这似乎是一个合法的代码。但是,if 表达式永远不会运行。我已经调试了我的应用程序,提供程序是“gps”,它是字符串类型 - 但如果返回 false,我猜...

我在这里缺少什么?

Kur*_*aum 6

你需要provider.equals("gps")在你的 if 语句中做。在java中,您必须使用该.equals()方法比较字符串。在 java 中,==检查两个对象引用是否匹配,而不是字符串是否相同。有关更多信息,请参阅此StackoverFlow 帖子

  • 您还应该使用 LocationManager.GPS_PROVIDER 而不是“gps”,因为这在未来可能会改变.. (8认同)