【发布时间】:2016-12-23 11:47:49
【问题描述】:
我一直在执行FusedLocationProvider。 但是,我确实在单个活动中实现并获得了经纬度,但是我现在尝试的是在单独的非活动类 GetLocationActivity 中实现它,并在我的 Maps_activity 类中获取位置数据,当我单击按钮时,但是我我无法获取数据!
是否可以从课程中获取数据并将其显示在我的地图活动中? 我还尝试用 sharedPref 将数据保存在一个类中,但没有结果。
P.S : 我认为 GetLocationActivity 没有运行或者我无法实例化它。
这里是代码
Map_activity.java
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
private GoogleApiClient mGoogleApiClient;
private FloatingActionButton floatingActionButton;
private static final String LIST_FRAGMENT_TAG = "list_fragment";
private static final String TAG = "list_fragment";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
floatingActionButton = (FloatingActionButton) findViewById(R.id.fab);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
final GetLocationActivity obj = new GetLocationActivity();
floatingActionButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
obj.GetLocation();
}
});
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
// Add a marker in Karachi and move the camera
LatLng sydney = new LatLng(24.9217531, 66.8943302);
//mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Karachi"));
mMap.animateCamera(CameraUpdateFactory.zoomTo(10.75f));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
GetLocationActivity.java
public class GetLocationActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener , com.google.android.gms.location.LocationListener {
public final static String TAG = "Application";
private GoogleApiClient mGoogleApiClient;
private Location mLastLocation;
private LocationRequest mLocationRequest;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (mGoogleApiClient == null) {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
}
public void GetLocation()
{
try {
mLocationRequest = LocationRequest.create();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setInterval(10000); // Update location every second
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
mGoogleApiClient);
if (mLastLocation != null) {
Log.d(TAG, "onConnected: "+String.valueOf(mLastLocation.getLatitude()));
Log.d(TAG, "onConnected: "+String.valueOf(mLastLocation.getLongitude()));
}
} catch (SecurityException e) {
}
}
@Override
public void onConnected(@Nullable Bundle bundle) {
GetLocation();
}
@Override
public void onConnectionSuspended(int i) {
Toast.makeText(this, "onConnectionSuspended: " + String.valueOf(i),
Toast.LENGTH_LONG).show();
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
Toast.makeText(this, "onConnectionFailed: " + connectionResult.toString(),
Toast.LENGTH_LONG).show();
}
protected void onStart() {
mGoogleApiClient.connect();
super.onStart();
}
protected void onStop() {
mGoogleApiClient.disconnect();
super.onStop();
}
@Override
public void onLocationChanged(Location location) {
}
【问题讨论】:
-
这
GetLocationActivity obj = new GetLocationActivity();不会工作,例如 oncreate 不会被自动调用加上不要这样做,创建一个简单的类no extends things将你的逻辑移到那里并在任何你想要的地方使用它 -
@PavneetSingh 但它迫使我在一个类中运行 GoogleClient 以获取位置。我怎样才能运行其他类?
-
是的,您必须将上下文传递给它,您当前的方法不会按您想要的方式工作,您还需要在活动和位置逻辑类之间实现通信接口
-
怎么样?你能给我举个例子吗
-
是的,我可以,但它会是一个相当大的代码,如果我这样做,我也必须为更多的读者写很多解释,所以等待一段时间,如果没有答案出现(我希望不是)然后我会发布它,同时read this link,它将是您实施的关键部分
标签: android android-activity google-maps-android-api-2 fusedlocationproviderapi