首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选址问题

选址问题
EN

Stack Overflow用户
提问于 2010-11-27 20:01:10
回答 1查看 1.7K关注 0票数 0

大家好,我是android新手,我有一个小问题,如果有人能帮助我,我将不胜感激。

首先,我试图显示所有可用的位置提供商,但它不起作用;第二,当我运行it时,我无法从最好的可用提供商(我有我的wifi和网络提供商)那里获得任何位置信息。

代码语言:javascript
复制
package com.paad.whereami;

import java.io.IOException;
import java.util.List;
import java.util.Locale;
import android.app.Activity;
import android.content.Context;
import android.location.Address;
import android.location.Criteria;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;

public class WhereAmI extends Activity {

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    LocationManager locationManager;
    String context = Context.LOCATION_SERVICE;
    locationManager = (LocationManager)getSystemService(context);
    boolean enabledOnly = true;
    List<String> providers = locationManager.getProviders(enabledOnly);

    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    criteria.setAltitudeRequired(false);
    criteria.setBearingRequired(false);
    criteria.setCostAllowed(true);
    criteria.setPowerRequirement(Criteria.POWER_LOW);
    criteria.setSpeedRequired(true);
    String provider = locationManager.getBestProvider(criteria, true);   

      Location location = locationManager.getLastKnownLocation(provider);
    updateWithNewLocation(location);

    locationManager.requestLocationUpdates(provider, 2000, 1,
                                           locationListener);
  }


  private final LocationListener locationListener = new LocationListener() {
    public void onLocationChanged(Location location) {
      updateWithNewLocation(location);
    }

    public void onProviderDisabled(String provider){
      updateWithNewLocation(null);
    }



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

  private void updateWithNewLocation(Location location) {
    String latLongString;
    TextView myLocationText;
    myLocationText = (TextView)findViewById(R.id.myLocationText);

    String addressString = "No address found";

    if (location != null) {
      double lat = location.getLatitude();
      double lng = location.getLongitude();
      latLongString = "Lat:" + lat + "\nLong:" + lng;

      double latitude = location.getLatitude();
      double longitude = location.getLongitude();
      Geocoder gc = new Geocoder(this, Locale.getDefault());
      try {
        List<Address> addresses = gc.getFromLocation(latitude, longitude, 1);
        StringBuilder sb = new StringBuilder();
        if (addresses.size() > 0) {
          Address address = addresses.get(0);

          for (int i = 0; i < address.getMaxAddressLineIndex(); i++)
            sb.append(address.getAddressLine(i)).append("\n");

            sb.append(address.getLocality()).append("\n");
            sb.append(address.getPostalCode()).append("\n");
            sb.append(address.getCountryName());
        }
        addressString = sb.toString();
      } catch (IOException e) {}
    } else {
      latLongString = "No location found";
    }
    myLocationText.setText("Your Current Position is:\n" +
                            latLongString + "\n" + addressString);
  }
}
EN

回答 1

Stack Overflow用户

发布于 2011-11-11 19:16:23

我以前也有同样的问题,在搜索了一个lot...came的解决方案后,可以通过以下code...actuallu获得设备的即时位置,我们不能立即有全球定位系统的响应,所以我们可以有我们的位置根据蜂窝发射塔或wifi。因此,使其中一个能够获得您设备的即时位置。

代码语言:javascript
复制
@Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.leopard_screen);

            FindLocation(this);
        }


        public void FindLocation(Context context) {

            locationManager = (LocationManager) context
                    .getSystemService(Context.LOCATION_SERVICE);

            gps_enabled = locationManager
                    .isProviderEnabled(LocationManager.GPS_PROVIDER);
            network_enabled = locationManager
                    .isProviderEnabled(LocationManager.NETWORK_PROVIDER);

            if (network_enabled) {
                locationManager.requestLocationUpdates(
                        LocationManager.NETWORK_PROVIDER, 0, 0,
                        locationListenerNetwork);
                Log.i("@@@@@@@@@@ Network provider is enabled", "Network Provider");
            } else {
                Toast.makeText(LeopardScreen.this,
                        "Network provider is not enabled", 2000);
            }

            if (gps_enabled) {
                locationManager.requestLocationUpdates(
                        LocationManager.GPS_PROVIDER, 0, 0, locationListenerGPS);
                Log.i("@@@@@@@@@@ GPS provider is enabled", "GPS Provider");
            } else {
                Toast.makeText(LeopardScreen.this, "GPS provider is not enabled",
                        2000);
            }

            if(!network_enabled && !gps_enabled) {
                currentLocation = getMyLastKnownLocation();
                currentLatitude = currentLocation.getLatitude();
                currentLongitude = currentLocation.getLongitude();

                Log.i("@@@@@@@@ Both location provider disabled",
                        "getMylastKnownLocation = "+String.valueOf(currentLatitude)
                        + " : " + String.valueOf(currentLongitude));
                Toast.makeText(LeopardScreen.this,"LastKnownLocation\n"+String.valueOf(currentLatitude) + "\n"
                                + String.valueOf(currentLongitude), 3000).show();
                Intent intent = new Intent(LeopardScreen.this, mainActivity.class);
                startActivity(intent);
            }

        }

        LocationListener locationListenerNetwork = new LocationListener() {
            public void onLocationChanged(Location location) {
                updateLocation(location);
                handler.removeCallbacks(runnable);
                Log.i("@@@@@@@@ Inside FindLocation", "Inside FindLocation");
                Toast.makeText(
                        LeopardScreen.this,"Network Location \n"+
                        String.valueOf(currentLatitude) + "\n"
                                + String.valueOf(currentLongitude), 5000).show();

            }

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

            }

            public void onProviderEnabled(String provider) {
            }

            public void onProviderDisabled(String provider) {
            }

        };

        LocationListener locationListenerGPS = new LocationListener() {

            @Override
            public void onLocationChanged(Location location) {
                updateLocation(location);

                Log.i("@@@@@@@@@@ Inside onLocationChangedGPS", String
                        .valueOf(currentLatitude)
                        + " : " + String.valueOf(currentLongitude));

                Toast.makeText(
                        LeopardScreen.this,
                        "GPS Location \n" + String.valueOf(currentLatitude) + "\n"
                                + String.valueOf(currentLongitude), 5000).show();

            }

            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onProviderEnabled(String provider) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onProviderDisabled(String provider) {
                // TODO Auto-generated method stub

            }

        };

        public Location getMyLastKnownLocation () {


                Location locNetwrok = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                Location locGPS = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                if(locNetwrok != null)
                    return locNetwrok;
                else if(locGPS != null)
                    return locGPS;

                return null;
        }

        void updateLocation(Location location) {
            currentLocation = location;
            currentLatitude = currentLocation.getLatitude();
            currentLongitude = currentLocation.getLongitude();

            Log.i("@@@@@@@@ Inside LeopardScreen locationChanged",
                    "locationChanged");

        }

别忘了添加Menifeast

代码语言:javascript
复制
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET"/>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4291533

复制
相关文章

相似问题

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