Java Android用户位置分离类
这个应用程序获取用户位置并显示经度和纬度。当它全部在主活动中时,它运行良好。我尝试在另一个类中分离它,并在主活动中调用它,但它不起作用,我得到了空值 main活动Java Android用户位置分离类,java,android,Java,Android,这个应用程序获取用户位置并显示经度和纬度。当它全部在主活动中时,它运行良好。我尝试在另一个类中分离它,并在主活动中调用它,但它不起作用,我得到了空值 main活动 public class MainActivity extends AppCompatActivity{ private TextView textView; private Double longitude, latitude; private GetLocation getLocation; @
public class MainActivity extends AppCompatActivity{
private TextView textView;
private Double longitude, latitude;
private GetLocation getLocation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
getLocation=new GetLocation();
longitude=getLocation.getLongitude();
latitude=getLocation.getLatitude();
textView.setText(longitude+"\n"+latitude);
}
}
GetLocation
public class GetLocation extends AppCompatActivity implements LocationListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
private Double latitude,longitude;
private GoogleApiClient googleApiClient;
private LocationRequest locationRequest;
private static final int MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION = 1;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
locationRequest=new LocationRequest();
locationRequest.setInterval(5000);
locationRequest.setFastestInterval(5000);
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
googleApiClient=new GoogleApiClient.Builder(this).addConnectionCallbacks(this).addOnConnectionFailedListener(this).addApi(LocationServices.API).build();
}
@Override
protected void onStart() {
googleApiClient.connect();
super.onStart();
}
@Override
protected void onStop() {
googleApiClient.disconnect();
super.onStop();
}
@Override
public void onConnected(@Nullable Bundle bundle) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED){
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
ActivityCompat.requestPermissions(GetLocation.this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
return;
}
LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient, locationRequest, this);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(GetLocation.this,
"permission was granted, :)",
Toast.LENGTH_LONG).show();
try{
LocationServices.FusedLocationApi.requestLocationUpdates(
googleApiClient, locationRequest, this);
}catch(SecurityException e){
Toast.makeText(GetLocation.this,
"SecurityException:\n" + e.toString(),
Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(GetLocation.this,
"permission denied, ...:(",
Toast.LENGTH_LONG).show();
}
return;
}
}
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
Toast.makeText(GetLocation.this,
"onConnectionFailed: \n" + connectionResult.toString(),
Toast.LENGTH_LONG).show();
}
@Override
public void onLocationChanged(Location location) {
if (location!=null){
latitude=location.getLatitude();
longitude=location.getLongitude();
}
}
public Double getLatitude(){return latitude;}
public Double getLongitude(){return longitude;}
}
我相信当您调用new GetLocation()时,该活动不会启动,因为它是一个AppCompative活动,因此位置坐标为null。您可能希望使用意图启动活动。如果我希望在不离开主活动的情况下使用该类,则要编辑什么?请尝试此-Intent Intent=new Intent(GetLocation.this,MainActivity.class);星触觉(意向);