精华内容
下载资源
问答
  • Android6.0 高通上面跑 D:\AndroidStudioProjects\MyGPSTest ... 基于android的定位无非就两种:network、gps。两者各有优劣。 GPS定位的好处:精确度高;坏处:仅能在户外使用,获取...网络定位的好处:户内户外都...

    Android6.0 高通上面跑

    D:\AndroidStudioProjects\MyGPSTest

    https://www.iteye.com/blog/gundumw100-2160728

    基于android的定位无非就两种:network、gps。两者各有优劣。
    GPS定位的 好处 :精确度高; 坏处 :仅能在户外使用,获取定位信息速度慢,耗费电池。 
    网络定位的 好处 :户内户外都能使用,定位速度快,电量耗费低; 坏处 :精确度不太高。

    定位主要是这两个方法 getBestProvider()、requestLocationUpdates();

     

    locationManager.getBestProvider(criteria,true);方法看起来很完美,但其实返回值就network、gps二选一。而且如果你设置里面是高精度(网络与GPS),它会优先检查GPS provider 返回的是GPS;如果设置里面选择了节电(网络)provider 就返回network;如果手机开启了仅限设备(GPS)就返回GPS;如果都没开启则返回null。

    其实通过bestProvider也是可以实现GPS跟网络一起定位的,只是第一次需要通过GPS定位成功了,后面没有GPS了(到室内)才会切换到网络定位。

     

    注意requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,networkListener)如果设置第一个参数为网络定位,第三个参数设置为0。第三个参数为位置变化最小距离:当位置距离变化超过此值时,将更新位置信息。如果位置不变定位是不更新的。

    //注册监听    
     locationManager.requestLocationUpdates(provider, 60000, 0,new MyLocationListener());

    举个例子:如果你在室内,gps无法定位到,你的程序将陷入死循环。当然使用requestLocationUpdates可以做到定位且不让程序陷入死循环,但是定位耗时长,甚至得不到定位。
    如果使用网络定位呢,不得说这也是一个不错的选择。locationManager.requestLocationUpdates(
                  LocationManager.NETWORK_PROVIDER, 0, 0,networkListener);
    网络定位耗时一般在2秒左右(网络差,时间会更长),只要你接入网络,基本上都能获得定位。唯一的缺点就是精度不高。

    那能不能将两者结合,这也是本文的重点。既然结合两者,就要同时为两者添加监听

    Java代码

     

    1. locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000 * 2,50,gpsListener);  
    2. locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,networkListener);  



    这样,大概2秒我们就可以得到来自网络的定位,一分钟后得到来自GPS定位。这时用GPS定位替换网络定位就好了。当然这只是个理想的情况,现实要复杂的多。

    GpsDemo.java中的代码:

        package com.example.demo;
         
        import android.app.Activity;
        import android.content.Context;
        import android.location.Criteria;
        import android.location.Location;
        import android.location.LocationListener;
        import android.location.LocationManager;
        import android.os.Bundle;
        import android.view.View;
        import android.widget.Toast;
         
        public class GpsDemo extends Activity {
            
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_gpsdemo);
            }
            
            //实现GPS的方法
            public void gps(){
                //定义LocationManager对象
                LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
                
                //定义Criteria对象
                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(false);
                
                //得到最好的定位方式    
                String provider = locationManager.getBestProvider(criteria, true);
                
                //注册监听    
                locationManager.requestLocationUpdates(provider, 60000, 0,new MyLocationListener());

                //在这里分别写GPS、网络的监听,就可以监听两个方式的定位了
            }
            
            //实现监听接口
            private final class MyLocationListener implements LocationListener {
                @Override// 位置的改变
                public void onLocationChanged(Location location) {
                    // TODO Auto-generated method stub
                    double latitude = location.getLatitude();// 维度
                    double longitude = location.getLongitude();// 经度
                    //显示当前坐标
                    Toast.makeText(GpsDemo.this, "location:("+latitude+","+longitude+")", Toast.LENGTH_LONG).show();
                }
         
                @Override// gps卫星有一个没有找到
                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 void getLocation(View view) {
                this.gps();
            }
        }

    展开全文
  • Android网络定位或GPS定位

    万次阅读 2017-01-17 18:34:09
    简单的位置定位设备位置定位的方式有两种:GPS定位和网络定位。1.GPS准确度高但耗电多,2.网络定位耗电少但准确度低。

    简单的位置定位

    设备位置定位的方式有两种:GPS定位和网络定位。

    1.GPS准确度高但耗电多,

    2.网络定位耗电少但准确度低

    下面介绍Android中最简单的获得手机地理位置的方法:

    1.添加权限

        <!-- provider的权限 -->
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <!-- 仅网络定位的权限 -->
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

    2.获取定位管理对象

    //定义数据
         //定位都要通过LocationManager这个类实现
        private LocationManager locationManager;
        private String provider; //是否为网络位置控制器或GPS定位
        //当前可用的位置控制器
        List<String> list;
    
    //实例化   
            //获取定位服务管理对象
            locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
            //获取当前可用的位置控制器
            list = locationManager.getProviders(true);
    

    3.选择GPS定位还是选择网络定位,最好选择GPS。

        //检查是否打开了GPS或网络定位
            if (list.contains(LocationManager.GPS_PROVIDER)) {
                //是否为GPS位置控制器
                provider = LocationManager.GPS_PROVIDER;
                textView.append("GPS位置控制器" + "\n");
            } else if (list.contains(LocationManager.NETWORK_PROVIDER)) {
                //是否为网络位置控制器
                provider = LocationManager.NETWORK_PROVIDER;
                textView.append("网络位置控制器" + "\n");
            } else {
                Toast.makeText(this, "请检查网络或GPS是否打开", Toast.LENGTH_LONG).show();
                return;
            }
    

    4.获取地理位置

     Location location = locationManager.getLastKnownLocation(provider);
            if (location != null) {
                //获取当前位置,这里只用到了经纬度
                String string = " 纬度为:" + location.getLatitude() + ",经度为:"
                        + location.getLongitude();
                Toast.makeText(this, string, Toast.LENGTH_SHORT).show();
                textView.append(string + "\n");
            }

    5.绑定监听事件,如果位置改变就回调相应的方法

     //绑定定位事件,监听位置是否改变
            //第一个参数为控制器类型第二个参数为监听位置变化的时间间隔(单位:毫秒)
            //第三个参数为位置变化的间隔(单位:米)第四个参数为位置监听器
            locationManager.requestLocationUpdates(provider, 2000, 2,
                    locationListener);

    执行上面的代码前还要创建一个监听对象:

       LocationListener locationListener = new LocationListener() {
    
            @Override
            //状态改变的回调方法
            public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
    
            }
    
            @Override
            //提供者(网络或GPS)被打开的回调方法
            public void onProviderEnabled(String arg0) {
            }
    
            @Override
            //提供者(网络或GPS)被关闭的回调方法
            public void onProviderDisabled(String arg0) {
            }
    
            @Override
            //经纬度改变的回调方法,基本都是使用这个回调方法
            public void onLocationChanged(Location arg0) {
                // 更新当前经纬度
                // Toast.makeText(MainActivity.this, "" + arg0.toString(), Toast.LENGTH_SHORT).show();
                textView.append("经度:" + arg0.getLongitude() + ",纬度:" + arg0.getLatitude() + "\n");
            }
        };
    

    上面就是最简单的定位的功能代码。但是实际中会报错!因为权限的请求问题!还有API的等级问题!
    这里就需要多加几行代码:

       if (Build.VERSION.SDK_INT >= 23) {
    
                //如果用户并没有同意该权限
                if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                    //申请权限
                    // requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 100);
                } else {
                    //有权限直接获取地理位置
    
                }
    
            } else {//低版本手机,直接获取位置信息
    
            }

    实际上,上面代码方法里面不写东西也是可以的,但是如果没有上面的代码,编译就不通过!

    下面是一个简单请求地理位置的程序:

    效果:

    aa
    这里已经打开GPS定位功能了,所以默认显示的GPS定位,否则只能显示网络定位!

    1.添加权限

        <!-- provider的权限 -->
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <!-- 仅网络定位的权限 -->
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

    2.布局设置

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="getLocation"
            android:text="获取我所在的位置的经纬度" />
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="bandLocationListener"
            android:text="一直监听位置" />
    
        <TextView
            android:id="@+id/tv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>

    3.代码设计

    package fuxi.location;
    
    import android.Manifest;
    import android.content.Context;
    import android.content.pm.PackageManager;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.os.Build;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import java.util.List;
    
    public class MainActivity extends AppCompatActivity {
        //定位都要通过LocationManager这个类实现
        private LocationManager locationManager;
        private String provider; //是否为网络位置控制器
        //当前可用的位置控制器
        List<String> list;
        TextView textView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            textView = (TextView) findViewById(R.id.tv);
            //获取定位服务
            locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
            //获取当前可用的位置控制器
            list = locationManager.getProviders(true);
            //检查是否打开了GPS或网络定位
            if (list.contains(LocationManager.GPS_PROVIDER)) {
                //是否为GPS位置控制器
                provider = LocationManager.GPS_PROVIDER;
                textView.append("GPS位置控制器" + "\n");
            } else if (list.contains(LocationManager.NETWORK_PROVIDER)) {
                //是否为网络位置控制器
                provider = LocationManager.NETWORK_PROVIDER;
                textView.append("网络位置控制器" + "\n");
            } else {
                Toast.makeText(this, "请检查网络或GPS是否打开", Toast.LENGTH_LONG).show();
                return;
            }
    
        }
    
        //获得我所在的位置的经纬度
        public void getLocation(View view) {
            if (Build.VERSION.SDK_INT >= 23) {
                //如果用户并没有同意该权限
                if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                    //申请权限
                }
            } else {//低版本手机,直接获取位置信息
    
            }
            Location location = locationManager.getLastKnownLocation(provider);
            if (location != null) {
                //获取当前位置,这里只用到了经纬度
                String string = " 纬度为:" + location.getLatitude() + ",经度为:"
                        + location.getLongitude();
                Toast.makeText(this, string, Toast.LENGTH_SHORT).show();
                textView.append(string + "\n");
            }
    
        }
    
        //位置的监听
        public void bandLocationListener(View view) {
            //绑定定位事件,监听位置是否改变
            //第一个参数为控制器类型第二个参数为监听位置变化的时间间隔(单位:毫秒)
            //第三个参数为位置变化的间隔(单位:米)第四个参数为位置监听器
            locationManager.requestLocationUpdates(provider, 2000, 2,
                    locationListener);
            if (Build.VERSION.SDK_INT >= 23) {
    
                //如果用户并没有同意该权限
                if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                    //申请权限
                    // requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 100);
                } else {
                    //有权限直接获取地理位置
    
                }
    
    
            } else {//低版本手机,直接获取位置信息
    
    
            }
        }
    
        LocationListener locationListener = new LocationListener() {
    
            @Override
            //状态改变的回调方法
            public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
    
            }
    
            @Override
            //提供者(网络或GPS)被打开的回调方法
            public void onProviderEnabled(String arg0) {
            }
    
            @Override
            //提供者(网络或GPS)被关闭的回调方法
            public void onProviderDisabled(String arg0) {
            }
    
            @Override
            //经纬度改变的回调方法,基本都是使用这个回调方法
            public void onLocationChanged(Location arg0) {
                // 更新当前经纬度
                // Toast.makeText(MainActivity.this, "" + arg0.toString(), Toast.LENGTH_SHORT).show();
                textView.append("经度:" + arg0.getLongitude() + ",纬度:" + arg0.getLatitude() + "\n");
            }
        };
    
        //关闭时解除监听器
        @Override
        protected void onDestroy() {
            super.onDestroy();
            if (locationManager != null) {
                if (Build.VERSION.SDK_INT >= 23) {
    
                    //如果用户并没有同意该权限
                    if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                        //申请权限
                    }
                }
                locationManager.removeUpdates(locationListener);
            }
        }
    
    
    }
    

    上面程序在真机上面跑,是可以看到经纬度的实际变化的。
    当然这里只是最简单的位置的请求,可以把请求的位置放到百度地图上。
    但是使用百度的地图的SDK,可以很方便的请求到位置并且显示到地图上面,这个另作总结。

    展开全文
  • 我这边网络定位和GPS定位 有的手机可以有的手机不行,有的手机两个都不行,有什么方法可以准确定位呢,不使用第三方的情况下
  • Android网络定位实现

    千次阅读 2014-03-11 00:32:39
    1、引言  目前LBS((Location Based ...但是,他们有一个致命的确定:在室内的环境中,基本是定位不了,而且GPS定位速度是比不上网络定位的。所以,现在的LBS应用中,都是同时打开网络定位和GPS定位的。其中,网络定位


    1、引言

            目前LBS((Location Based Service)的应用越来越多,基本占据手机应用的半壁江山。很多说到定位,就立马想到了GPS和中国的北斗。没错,卫星导航系统确实可以给我们精确的定位信息。但是,他们有一个致命的确定:在室内的环境中,基本是定位不了,而且GPS定位速度是比不上网络定位的。所以,现在的LBS应用中,都是同时打开网络定位和GPS定位的。其中,网络定位可以快速的给用户一个不是很精确的位置(包括在室内环境),当GPS定位成功后,可以修正当前的位置。两者结合,可以给用户很好的体验。

    2、网络定位原理

            网络定位和基站定位的原理是相似的。在度娘中输入“基站定位”,就会得到一大堆的实例。这里也总结下:网络定位就是通过获取周边的基站信息(mcc,mnc等),将这些信息post到指定的服务器,就可以得到服务器的响应信息,最后从这些信息中解析出经纬度信息。目前网上的很多基站定位的例子都比较旧,访问的都是google提供的测试服务器(http://www.google.com/loc/json),现在该服务器已经不再提供免费的服务了。

           看完别人的代码后,也许你会有这样的疑问:网络定位是不是也是类似,搜索周围的热点信息,post到服务器,然后解析出经纬度啊?能不能像使用GPS一样那么方便呢?

           是的,你可以像使用GPS一样来使用网络定位。因为Android中已经将网络定位开发成了一个apk(NetworkLocation.apk),存放在system/app目录下。由于Google提供的NetworkLocation.apk在中国大陆是不能使用的,不过不用担心,百度也开发了一个类似的apk,大家可以使用百度的来代替。

    2、Android网络定位实现

            相信使用过GPS童鞋都知道,实现步骤主要分两步:

            1)获取适当的LocationProvider,这里选择网络定位,所以为LocationManager.NETWORK_PROVIDER;

            2)向LocationManager中注册监听器,该监听器实现接口android.location.LocationListener。

            如果你已经确定使用哪种定位技术,就可以提供过第一步,直接注册监听器就行了。

            下面的代码是网络定位的实现例子,来自于相机中的定位实现,不过已经删除了GPS定位相关的代码,大家可以参考下。

    package com.location.netlocation;
    
    import android.content.Context;
    import android.location.Location;
    import android.location.LocationProvider;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.Toast;
    
    /**
     * A class that handles everything about location.
     */
    public class MyLocationManager {
        private static final String TAG = "MyLocationManager";
    
        private Context mContext;
        private android.location.LocationManager mLocationManager;
        private boolean mRecordLocation = false;
        // 被注册的监听器,实现LocationListener接口
        private LocationListener mNetworkLocationListener = 
        		new LocationListener(android.location.LocationManager.NETWORK_PROVIDER);
    
        public MyLocationManager(Context context) {
            mContext = context;
        }
    
        /**
         * 获取定位后的位置信息
         * @return
         */
        public Location getCurrentLocation() {
            if (!mRecordLocation) {
            	return null;
            }
    
            Location l = mNetworkLocationListener.current();
            if (null != l) {
            	return l;
            }
    
            Log.d(TAG, "No location received yet.");
            return null;
        }
    
        /**
         * 打开或者关闭网络定位
         * @param recordLocation 
         * true   打开网络定位
         * false  关闭网络定位
         */
        public void recordLocation(boolean recordLocation) {
            if (mRecordLocation != recordLocation) {
                mRecordLocation = recordLocation;
                if (recordLocation) {
                    startReceivingLocationUpdates();
                } else {
                    stopReceivingLocationUpdates();
                }
            }
        }
        
        public boolean getRecordLocation() {
        	return mRecordLocation;
        }
    
        private void startReceivingLocationUpdates() {
        	Log.d(TAG, "startReceivingLocationUpdates  ");
            if (mLocationManager == null) {
                mLocationManager = (android.location.LocationManager)
                        mContext.getSystemService(Context.LOCATION_SERVICE);
            }
            if (mLocationManager != null) {
            	Log.d(TAG, "requestNewWorkLocation");
                try {
                	/**
                	 * 注册监听器
                	 */
                    mLocationManager.requestLocationUpdates(
                            android.location.LocationManager.NETWORK_PROVIDER,
                            1000,
                            0F,
                            mNetworkLocationListener);
                } catch (SecurityException ex) {
                    Log.i(TAG, "fail to request location update, ignore", ex);
                } catch (IllegalArgumentException ex) {
                    Log.d(TAG, "provider does not exist " + ex.getMessage());
                }
            }
        }
    
        private void stopReceivingLocationUpdates() {
            if (mLocationManager != null) {
                try {
                	/**
                	 * 删除监听器
                	 */
                    mLocationManager.removeUpdates(mNetworkLocationListener);
                } catch (Exception ex) {
                    Log.i(TAG, "fail to remove location listners, ignore", ex);
                }
            }
        }
        
        private class LocationListener implements android.location.LocationListener {
            Location mLastLocation;
            boolean mValid = false;
            String mProvider;
    
            public LocationListener(String provider) {
                mProvider = provider;
                mLastLocation = new Location(mProvider);
            }
    
            @Override
            public void onLocationChanged(Location newLocation) {
            	Log.d(TAG, mProvider + "Location  latitude = " + newLocation.getLatitude() + " longitude = " + newLocation.getLongitude());
            	
                if (newLocation.getLatitude() == 0.0
                        && newLocation.getLongitude() == 0.0) {
                    return;
                }
    
                if (!mValid) {
            		Toast.makeText(mContext, "定位成功", Toast.LENGTH_SHORT).show();
                }
                mLastLocation.set(newLocation);
                mValid = true;
            }
    
            @Override
            public void onProviderEnabled(String provider) {
            }
    
            @Override
            public void onProviderDisabled(String provider) {
                mValid = false;
            }
    
            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {
            	Log.d(TAG, "provider = " + provider + ", status = " + status);
                switch(status) {
                case LocationProvider.OUT_OF_SERVICE:
                case LocationProvider.TEMPORARILY_UNAVAILABLE:
                    mValid = false;
                    break;
                }
            }
    
            public Location current() {
                return mValid ? mLastLocation : null;
            }
        }
    }
    


    展开全文
  • android studio 网络定位城市名称

    千次阅读 2016-04-17 20:08:44
    大家好,由于最近比较忙没有及时更新文章,今天我们来学一下简单易懂的网络获取城市名称,因为实际开发中会经常用到定位当前城市,那现在跟我一起实现吧!  温馨提示:1.我们要申请百度地图定位API帐号:...

         大家好,由于最近比较忙没有及时更新文章,今天我们来学一下简单易懂的网络获取城市名称,因为实际开发中会经常用到定位当前城市,那现在跟我一起实现吧!


       温馨提示:1.我们要申请百度地图定位API帐号:http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/key

                        2.获取百度的Key,获取密钥有详细步骤,那我就不一一说了。

                        3.下载百度类包:http://lbsyun.baidu.com/index.php?title=android-locsdk/geosdk-android-download

        

      实现步骤: 1. 首先将下载好的百度类库放进android  studio APP下libs中,如下:(为了更好的兼容,这些文件都放进去)


                         2.然后配置在APP下build.gradle文件,要配置两个地方,注意文字部分如下:



                          3.再配置AndroidManifest.xml文件,声明service组件,设置AccessKey,和添加权限,注意文字地方如下:



                           4.在activity_main.xml中写一个文本,如下:

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/qw"/>
    <TextView
        android:id="@+id/tv_loc_info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="40dp" />
                              5.最后在MainActivity中写实现代码,如下:

    package com.example.baidu;
    
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.widget.ImageView;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import com.baidu.location.BDLocation;
    import com.baidu.location.BDLocationListener;
    import com.baidu.location.LocationClient;
    import com.baidu.location.LocationClientOption;
    
    public class MainActivity extends AppCompatActivity {
        private ImageView image;
        private TextView mTv = null;
        public LocationClient mLocationClient = null; //初始化LocationClient    public MyLocationListener myListener = new MyLocationListener();
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //在使用SDK各组件之前初始化context信息,传入ApplicationContext
            //声明LocationClient        mLocationClient = new LocationClient(getApplicationContext());
            mLocationClient.registerLocationListener(myListener); //注册监听函数
            image=(ImageView)findViewById(R.id.image);  //初始化图片
            mTv = (TextView) findViewById(R.id.tv_loc_info); //初始化文本
            setLocationOption(); //定义setLocationOption()方法
            mLocationClient.start(); //执行定位
        }
    
        public class MyLocationListener implements BDLocationListener {
            @Override
            public void onReceiveLocation(BDLocation location) {
                //将获取的City赋值给txt
                /**
                 *1.国家:location.getCountry()
                 * 2.城市:location.getCity()
                 * 3.区域(例:天河区)location.getDistrict()
                 * 4.地点(例:风信路)location.getStreet()
                 * 5.详细地址:location.getAddrStr()
                 */
                mTv.setText(location.getCity()+location.getDistrict());
                Toast.makeText(MainActivity.this,"网络定位成功"+
                        location.getDirection(),Toast.LENGTH_LONG).show();
            }
            public void onReceivePoi(BDLocation arg0) {
            }
        }
    
        //执行onDestroy()方法,停止定位
        @Override
        public void onDestroy() {
            mLocationClient.stop();
            super.onDestroy();
        }
    
        //设置相关参数
        private void setLocationOption() {
            LocationClientOption option = new LocationClientOption();
            option.setOpenGps(true); //打开gps
            option.setAddrType("all");//返回定位结果包含地址信息
            option.setPriority(LocationClientOption.NetWorkFirst); // 设置网络优先
            option.setPriority(LocationClientOption.GpsFirst);       //gps
            option.disableCache(true);//禁止启用缓存定位
            mLocationClient.setLocOption(option);
        }
    
    }
    

                           6.实现效果如下:



      温馨提示:源代码:https://github.com/SuperJack8/Location

    展开全文
  • 主要为大家详细介绍了Android使用网络获取定位的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Android开发之原生定位的方法(GPS,网络定位)更多查看我的博客:https://blog.csdn.net/xiayiye5/article/details/83686286
  • Android通过网络定位获取坐标及城市信息,通过中国天气网获取天气数据。
  • 作为Android开发者可能会经常遇到定位的问题,在获取位置信息的时候就会遇到使用网络定位、GPS定位等种类。其实、百度和高德等还对定位结果进行了优化,其中包括卡尔曼滤波。卡尔曼滤波怎么推导的我也不是很清楚,...
  • Android原生GPS和网络定位工具类

    千次阅读 热门讨论 2019-02-27 10:34:07
    在应用开发中我们常常需要网络获取位置的方法,这里做一个工具类的封装,使用的是Android原生定位,包含两种方式,一种是原生GPS一种是网络定位的封装实现: 工具类代码如下所示: package ...
  • 定位一般分为三种发方案:即GPS定位、网络定位以及基站定位。   最简单的手机定位方式当然是通过GPS模块,GPS方式准确度是最高的,但是它的缺点也非常明显: 1,比较耗电;2,绝大部分用户默认不开启GPS模块;3...
  • 从前天学习GPS定位开始,这两天断断续续都在
  • Android Gps定位和网络定位

    千次阅读 2016-12-19 16:09:22
    "请检查网络或GPS是否打开" , Toast. LENGTH_LONG ). show (); return ; } Location location = lm . getLastKnownLocation ( provider ); if (location != null ) { String string = "纬度为:" + location....
  • Android获取GPS网络定位经纬度信息

    千次阅读 2015-11-07 17:38:57
    定位一般分为是:GPS定位,WIFI定位,基站定位 和 AGPS定位GPS定位...从GPS模块启动到获取第一次定位数据,可能需要比较长的时间,室内几乎无法使用网络定位网络定位是指利用基站或Wi-Fi访问提供近似的位置信息,这种...
  • android 10 定位权限适配

    千次阅读 2020-08-12 21:52:00
    * 判断网络定位是否打开 * * @return 定位打开结果 */ public static boolean isLocationEnable(Activity activity) { LocationManager locationManager = (LocationManager) activity.getSystemService...
  • Android-使用网络获取定位

    千次阅读 2016-07-24 09:31:35
    程序运行弹出权限选择,选择运行网络定位后会查询位置,然后在TextView上显示当前国家和城市。 1.activity_main.xml页面定义TextView显示城市名。 activity_main.xml页面: <RelativeLayout xmlns:android=...
  • Android获取当前位置(GPS和网络定位

    万次阅读 热门讨论 2016-07-15 22:46:38
    1、比较:GPS准确度高但耗电多,网络定位耗电少但准确度低2、代码public class MainActivity extends Activity { //定位都要通过LocationManager这个类实现 private LocationManager locationManager; private ...
  • addsList = geocoder.getFromLocation(latitude, longitude, 10);//得到的位置可能有多个当前只取其中一个 Log.e("打印拿到的城市", addsList.toString()); } catch (IOException e) { e.printStackTrace(); }...
  • Android 获取GPS和网络定位信息

    千次阅读 2015-09-29 11:31:55
    获取到位置服务后,同时请求网络和GPS定位更新。在没有GPS信号的时候,使用网络定位的位置信息。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 63,515
精华内容 25,406
关键字:

安卓10网络定位