簡體   English   中英

LocationManager提供商

[英]LocationManager Provider

我不知道如何編寫代碼以選擇網絡提供商,或者如果網絡不可用,則選擇GPS提供商。 我如何更改代碼以獲取此信息。 這是我的第一個android應用程序,我嘗試這樣做,但是沒有成功。

package com.example.googlemapslbs;

import java.util.List;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.Toast;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import com.google.android.gms.maps.CameraUpdateFactory;
import android.location.Criteria;
import android.util.Log;

public class MainActivity extends Activity {
    GoogleMap Map;

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

        try {
            // Load map
            initilizeMap();
            } 
        catch (Exception e) {
            e.printStackTrace();
        }

    }


    private void initilizeMap() {
        if (Map == null) {
            Map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

            // map type normal (other possible choices: hybrid, terrain, satellite)
            Map.setMapType(GoogleMap.MAP_TYPE_NORMAL);

           // enable my-location 
           Map.setMyLocationEnabled(true);
           LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

           //
           Criteria criteria = new Criteria(); 
           String provider = locationManager.getBestProvider(criteria, true);

           //getting Current Location
           Location location = locationManager.getLastKnownLocation(provider);

           if(location == null){
               LocationListener locationListener = new LocationListener() {

                @Override
                public void onLocationChanged(Location location) {
                    double lat= location.getLatitude();
                    double lng = location.getLongitude();
                    LatLng ll = new LatLng(lat, lng);
                    Map.moveCamera(CameraUpdateFactory.newLatLngZoom(ll, 18));                    
                }
                @Override
                public void onProviderDisabled(String provider) {}
                @Override
                public void onProviderEnabled(String provider) {}
                @Override
                public void onStatusChanged(String provider, int status,
                        Bundle extras) {}
                };
             //Log.d("APpln", "well hello there >>"+location);

                //location updates - requestLocationUpdates(provider, minTime, minDistance, listener)
                locationManager.requestLocationUpdates(provider, 20000, 0, locationListener);

           }else{
               double lat= location.getLatitude();
               double lng = location.getLongitude();

               LatLng ll = new LatLng(lat, lng);

               //modify the map's camera - zoom 18
               Map.moveCamera(CameraUpdateFactory.newLatLngZoom(ll, 18));
           }


        // Define a listener that responds to location updates
           LocationListener locationListener = new LocationListener() {

               public void onLocationChanged(Location location) {

                 // Called when a new location is found by the network location provider.
                 makeUseOfNewLocation(location);
               }

               private void makeUseOfNewLocation(Location location) {
                   double lat = location.getLatitude();
            double lng = location.getLongitude();
                LatLng ll = new LatLng(lat, lng);
                Toast.makeText(getApplicationContext(), "Your Current Location \nLat: " + lat + "\nLng: " + lng, Toast.LENGTH_LONG).show();

            }

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

               public void onProviderEnabled(String provider) {}

               public void onProviderDisabled(String provider) {}
             };

             locationManager.requestLocationUpdates(locationManager.getBestProvider(criteria, true), 0, 0, locationListener);

            // check if map is created successfully or not
            if (Map == null) {
                Toast.makeText(getApplicationContext(),
                        "ups... can not create map", Toast.LENGTH_SHORT)
                        .show();
            }
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        initilizeMap();
    }

    }

我剛剛完成一個示例項目,以了解Location Services的用法。 我只是在發布我的代碼,請隨時使用它來滿足您的需要並了解Location Services的工作。 此代碼將檢查最佳的位置服務提供商,並在設置關閉時將其打開。

public class DSLVFragmentClicks extends Activity implements LocationListener {
private final int BESTAVAILABLEPROVIDERCODE = 1;
private final int BESTPROVIDERCODE = 2;
LocationManager locationManager;
String bestProvider;
String bestAvailableProvider;

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == BESTPROVIDERCODE) {
        if (requestCode != Activity.RESULT_OK || locationManager.isProviderEnabled(bestProvider)) {
            Toast.makeText(getActivity(), "Error! Location Service " + bestProvider + " not Enabled", Toast.LENGTH_LONG).show();

        } else {
            getLocation(bestProvider);
        }
    } else {
        if (requestCode != Activity.RESULT_OK || locationManager.isProviderEnabled(bestAvailableProvider)) {
            Toast.makeText(getActivity(), "Error! Location Service " + bestAvailableProvider + " not Enabled", Toast.LENGTH_LONG).show();

        } else {
            getLocation(bestAvailableProvider);
        }
    }
}

public void getLocation(String usedLocationService) {
    Toast.makeText(getActivity(), "getting Location", Toast.LENGTH_SHORT).show();
    long updateTime = 0;
    float updateDistance = 0;
    // finding the current location 
    locationManager.requestLocationUpdates(usedLocationService, updateTime, updateDistance, this);

}


@Override
public void onCreate(Bundle savedState) {
    super.onCreate(savedState);
    setContentView(R.layout.main);
    // set a Criteria specifying things you want from a particular Location Service
            Criteria criteria = new Criteria();
            criteria.setSpeedRequired(false);
            criteria.setAccuracy(Criteria.ACCURACY_FINE);
            criteria.setCostAllowed(true);
            criteria.setBearingAccuracy(Criteria.ACCURACY_HIGH);
            criteria.setAltitudeRequired(false);

            locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
            // finding best provider without fulfilling the criteria
            bestProvider = locationManager.getBestProvider(criteria, false);
            // finding best provider which fulfills the criteria
            bestAvailableProvider = locationManager.getBestProvider(criteria, true);
            String toastMessage = null;
            if (bestProvider == null) {
                toastMessage = "NO best Provider Found";
            } else if (bestAvailableProvider != null && bestAvailableProvider.equals(bestAvailableProvider)) {
                boolean enabled = locationManager.isProviderEnabled(bestAvailableProvider);
                if (!enabled) {
                    Toast.makeText(getActivity(), " Please enable " + bestAvailableProvider + " to find your location", Toast.LENGTH_LONG).show();
                    Intent mainIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                    startActivityForResult(mainIntent, BESTAVAILABLEPROVIDERCODE);
                } else {
                    getLocation(bestAvailableProvider);
                }
                toastMessage = bestAvailableProvider + " used for getting your current location";
            } else {
                boolean enabled = locationManager.isProviderEnabled(bestProvider);
                if (!enabled) {
                    Toast.makeText(getActivity(), " Please enable " + bestProvider + " to find your location", Toast.LENGTH_LONG).show();
                    Intent mainIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                    startActivityForResult(mainIntent, BESTPROVIDERCODE);
                } else {
                    getLocation(bestProvider);
                }
                toastMessage = bestProvider + " is used to get your current location";

            }
            Toast.makeText(getActivity(), toastMessage, Toast.LENGTH_LONG).show();
            return true;
        }
    });
}

@Override
public void onLocationChanged(Location location) {
    Log.d("Location Found", location.getLatitude() + " " + location.getLongitude());
    // getting the street address from longitute and latitude
    Geocoder geocoder = new Geocoder(getActivity(), Locale.getDefault());
    String addressString = "not found !!";
    try {
        List<Address> addressList = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
        StringBuilder stringBuilder = new StringBuilder();
        if (addressList.size() > 0) {
            Address address = addressList.get(0);
            for (int i = 0; i < address.getMaxAddressLineIndex(); i++) {
                stringBuilder.append(address.getAddressLine(i)).append("\n");
                stringBuilder.append(address.getLocality()).append("\n");
                stringBuilder.append(address.getPostalCode()).append("\n");
                stringBuilder.append(address.getCountryName()).append("\n");
            }

            addressString = stringBuilder.toString();
            locationManager.removeUpdates(this);
        }
    } catch (IOException e) {
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    }
    Toast.makeText(getActivity(), " Your Location is " + addressString, Toast.LENGTH_LONG).show();
}

@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
    //To change body of implemented methods use File | Settings | File Templates.
}

@Override
public void onProviderEnabled(String s) {
    //To change body of implemented methods use File | Settings | File Templates.
}

@Override
public void onProviderDisabled(String s) {
    //To change body of implemented methods use File | Settings | File Templates.
}
}

如果您不了解其中的任何部分,請隨時提出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM