首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在android地图活动中从类中获取位置数据?

如何在android地图活动中从类中获取位置数据?
EN

Stack Overflow用户
提问于 2016-12-23 11:47:49
回答 1查看 149关注 0票数 0

我一直在实施FusedLocationProvider。但是,我确实在一个活动中实现并获得了lat和long,但是我现在尝试的是在单独的非活动类GetLocationActivity中实现它,并在我的Maps_activity类中获取位置数据,当我单击按钮时,但是我无法获得数据!

是否存在从类中获取数据并将其显示在我的映射活动中的问题?我还尝试使用sharedPref在类中保存数据,但没有结果。

P.S :我认为GetLocationActivity没有运行,或者我无法实例化它。

这是代码

Map_activity.java

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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) {

    }
EN

回答 1

Stack Overflow用户

发布于 2017-01-03 10:07:23

尝试使用GetLocation()静态

代码语言:javascript
运行
复制
public static void getLocation() {
    ...
}

访问这样的功能

代码语言:javascript
运行
复制
floatingActionButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        GetLocationActivity.getLocation();
    }
});

据我所知,我们不必使用实例对象访问它,我们可以使用静态对象访问它。CMIIW。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41300928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档