2017-05-24 21 views
-1

我试图在我的应用程序中使用熔合位置提供程序获得连续位置更新,但它在棒棒糖中运行良好,但在棉花糖中未显示任何位置更新。如何在Android Api level 23中实现融合位置提供程序

下面是我的code.Plz让我知道我是错的。

public class Gps extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener { 

TextView lati, longi; 
LocationRequest lr; 
GoogleApiClient mGoogleApiClient; 
double latitude = 0, longitude = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_gps); 

    lati = (TextView) findViewById(R.id.lati); 
    longi = (TextView) findViewById(R.id.longi); 

    mGoogleApiClient = new GoogleApiClient.Builder(getApplicationContext()) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .addApi(LocationServices.API) 
      .build(); 


} 

@Override 
protected void onStart() { 
    super.onStart(); 

    mGoogleApiClient.connect(); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 

    if (mGoogleApiClient.isConnected()) { 

     mGoogleApiClient.disconnect(); 
    } 
} 

@Override 
public void onConnected(@Nullable Bundle bundle) { 

    lr = LocationRequest.create(); 
    lr.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
    lr.setInterval(1000); 

    if (Build.VERSION.SDK_INT >= 23) { 
     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 

      requestPermissions(new String[]{ 

        Manifest.permission.ACCESS_FINE_LOCATION 
      }, 1); 

      return; 
     } 

    } 
    else{ 

     LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, lr,this); 
    } 
} 

@Override 
public void onLocationChanged(Location location) { 

    latitude = location.getLatitude(); 
    longitude = location.getLongitude(); 

    Geocoder gc = new Geocoder(Gps.this, Locale.getDefault()); 

    String locality = null; 
    String sub = null; 

    try { 

     List<Address> addrList; 

     addrList = gc.getFromLocation(latitude, longitude, 2); 

     if (addrList.size() > 0) { 

      Address adr = addrList.get(0); 
      locality = adr.getLocality(); 
      sub = adr.getSubLocality(); 

      lati.setText(locality); 
      longi.setText(sub); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

@Override 
public void onConnectionSuspended(int i) { 

} 

@Override 
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 

} 

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 

    switch (requestCode) { 

     case 2: 
      if(){ 
      }     
      else{ 

        } 
    } 

} 

}

回答

0

你有没有逻辑在您onRequestPermissionsResult功能位置更新请求。此外,即使您检查两者,您也只请求ACCESS_FINE_LOCATION而不是ACCESS_COARSE_LOCATION

编辑:

在你onConnected功能,你永远不会调用LocationServices.FusedLocationApi.requestLocationUpdates()当你在棉花糖以上。从本质上讲,你只是在做这样的:

if (Build.VERSION.SDK_INT >= 23) { 
    if (/*No permissions*/) { 
     //Request permissions 
     return; 
    } 
    //Location updates are never requested here!!! 
} 
else { 
    //Request location updates 
} 

当它应该是这样的:

if (Build.VERSION.SDK_INT >= 23) { 
    if (/*No permissions*/) { 
     //Request permissions 
     return; 
    } 
} 
//Request location updates 
+0

感谢现在告诉我增加了对粗定位请求太多,但如何请求在onRequestPermissionsResult位置更新PLZ让我知道。 – Digvijay

+0

在该函数中调用'LocationServices.FusedLocationApi.requestLocationUpdates()'。否则,在API 23+中,它永远不会被调用。 –

+0

我正在尝试添加LocationServices.FusedLocationApi.requestLocationUpdates(mGo ogleApiClient,lr,this);在OnRequestPermissionResult但显示错误说添加权限检查,但我已经检查权限。 – Digvijay

相关问题