摘要:本文将带你了解Android开发之定位功能实现方案,希望本文对大家学Android有所帮助。
Android开发中定位功能实现方案。首先我们需要修改AndroidManifest.xml文件中的配置信息。
如下所示
<!--?<strong-->xml version=<strong>"1.0" </strong><strong>encoding=</strong><strong>"utf-8"</strong>?> <<strong>manifest </strong><strong>xmlns:</strong><strong>android</strong><strong>=</strong><strong>"https://schemas.android.com/apk/res/android"</strong> <strong>package=</strong><strong>"com.example.administrator.applicationcode"</strong>> <em><!--位置服务--></em> <<strong>uses-permission </strong><strong>android</strong><strong>:name=</strong><strong>"android.permission.ACCESS_COARSE_LOCATION"</strong>/> <<strong>uses-permission </strong><strong>android</strong><strong>:name=</strong><strong>"android.permission.ACCESS_FINE_LOCATION"</strong>/> <<strong>uses-permission </strong><strong>android</strong><strong>:name=</strong><strong>"android.permission.ACCESS_WIFI_STATE"</strong>/> <<strong>uses-permission </strong><strong>android</strong><strong>:name=</strong><strong>"android.permission.ACCESS_NETWORK_STATE"</strong>/> <<strong>uses-permission </strong><strong>android</strong><strong>:name=</strong><strong>"android.permission.CHANGE_WIFI_STATE"</strong>/> <<strong>uses-permission </strong><strong>android</strong><strong>:name=</strong><strong>"android.permission.READ_PHONE_STATE"</strong>/> <<strong>uses-permission </strong><strong>android</strong><strong>:name=</strong><strong>"android.permission.WRITE_EXTERNAL_STORAGE"</strong>/> <<strong>uses-permission </strong><strong>android</strong><strong>:name=</strong><strong>"android.permission.INTERNET"</strong>/> <<strong>uses-permission </strong><strong>android</strong><strong>:name=</strong><strong>"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"</strong>/> <<strong>uses-permission </strong><strong>android</strong><strong>:name=</strong><strong>"android.permission.WAKE_LOCK"</strong>/>
<<strong>application</strong> <strong>android</strong><strong>:allowBackup=</strong><strong>"true"</strong> <strong>android</strong><strong>:icon=</strong><strong>"@mipmap/ic_launcher"</strong> <strong>android</strong><strong>:label=</strong><strong>"@string/app_name"</strong> <strong>android</strong><strong>:supportsRtl=</strong><strong>"true"</strong> <strong>android</strong><strong>:theme=</strong><strong>"@style/Theme.AppCompat.NoActionBar"</strong>> <<strong>meta-data</strong> <strong>android</strong><strong>:name=</strong><strong>"com.baidu.lbsapi.API_KEY"</strong> <strong>android</strong><strong>:value=</strong><strong>"之前的API key" </strong>/> <<strong>activity </strong><strong>android</strong><strong>:name=</strong><strong>".MainActivity"</strong>
> <<strong>intent-filter</strong>> <<strong>action </strong><strong>android</strong><strong>:name=</strong><strong>"android.intent.action.MAIN" </strong>/> <<strong>category </strong><strong>android</strong><strong>:name=</strong><strong>"android.intent.category.LAUNCHER" </strong>/> <!--<strong-->intent-filter> <!--<strong-->activity> <<strong>service </strong><strong>android</strong><strong>:name=</strong><strong>"com.baidu.loction.f" </strong><strong>android</strong><strong>:enabled=</strong><strong>"true"</strong> <strong>android</strong><strong>:process=</strong><strong>":remote"</strong> > <!--<strong-->service> <!--<strong-->application> <!--<strong-->manifest>
由于才用Toast弹窗来查看定位情况,所以layout就可以随意写了,大家可以根据自己情况来决定
下面看一下MainActivity.java怎么写
<strong>public class </strong>MainActivity <strong>extends </strong>AppCompatActivity <strong>implements </strong>View.OnClickListener{ <em>//位置服务</em> <strong>public </strong>LocationClient <strong>mLocationClient</strong>; @Override <strong>protected void </strong>onCreate(Bundle savedInstanceState) { <strong>super</strong>.onCreate(savedInstanceState); <em>//requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);</em> <em>//位置服务代码</em> <strong>mLocationClient</strong>=<strong>new </strong>LocationClient(getApplicationContext()); <strong>mLocationClient</strong>.registerLocationListener(<strong>new </strong>MyLocationListener()); <em>//权限组</em> List<string> permissionList=<strong>new </strong>ArrayList<>(); <strong>if</strong>(ContextCompat.checkSelfPermission(MainActivity.<strong>this</strong>, Manifest.permission.<strong><em>ACCESS_FINE_LOCATION</em></strong>)!=PackageManager.<strong><em>PERMISSION_GRANTED</em></strong>){ permissionList.add(Manifest.permission.<strong><em>ACCESS_FINE_LOCATION</em></strong>); } <strong>if </strong>(ContextCompat.checkSelfPermission(MainActivity.<strong>this</strong>,Manifest.permission.<strong><em>READ_PHONE_STATE</em></strong>)!=PackageManager.<strong><em>PERMISSION_GRANTED</em></strong>){ permissionList.add(Manifest.permission.<strong><em>READ_PHONE_STATE</em></strong>); } <strong>if </strong>(ContextCompat.checkSelfPermission(MainActivity.<strong>this</strong>,Manifest.permission.<strong><em>WRITE_EXTERNAL_STORAGE</em></strong>)!=PackageManager.<strong><em>PERMISSION_GRANTED</em></strong>){ permissionList.add(Manifest.permission.<strong><em>WRITE_EXTERNAL_STORAGE</em></strong>); } <strong>if </strong>(!permissionList.isEmpty()){ String[] permissions=permissionList.toArray(<strong>new </strong>String[permissionList.size()]); ActivityCompat.requestPermissions(MainActivity.<strong>this</strong>,permissions,1); }<strong>else </strong>{
requestLocation(); } setContentView(R.layout.<strong><em>activity_main</em></strong>); } <strong>private void </strong>requestLocation(){ initLocation(); <strong>mLocationClient</strong>.start(); } @Override <strong>public void </strong>onRequestPermissionsResult(<strong>int </strong>requestCode, @NonNull String[] permissions, @NonNull <strong>int</strong>[] grantResults) { <strong>switch </strong>(requestCode){ <strong>case </strong>1: <strong>if</strong>(grantResults.<strong>length</strong>>0){ <strong>for </strong>(<strong>int </strong>result:grantResults){ <strong>if </strong>(result!= PackageManager.<strong><em>PERMISSION_GRANTED</em></strong>){ Toast.makeText(<strong>this</strong>,<strong>"必须同意所有权限才能使用本程序"</strong>,Toast.<strong><em>LENGTH_SHORT</em></strong>).show(); finish(); <strong>return</strong>; } } requestLocation();
}<strong>else</strong>{ Toast.makeText(<strong>this</strong>,<strong>"发生未知错误"</strong>,Toast.<strong><em>LENGTH_SHORT</em></strong>).show(); finish(); } <strong>break</strong>; <strong>default</strong>: <strong>break</strong>; } } <em>//经纬转换</em> <strong>private void </strong>initLocation(){ LocationClientOption option=<strong>new </strong>LocationClientOption(); option.setScanSpan(5000); option.setIsNeedAddress(<strong>true</strong>); <strong>mLocationClient</strong>.setLocOption(option); }
<strong>public class </strong>MyLocationListener <strong>implements </strong>BDLocationListener{ @Override <strong>public void </strong>onReceiveLocation(BDLocation location) { StringBuilder currentPosition =<strong>new </strong>StringBuilder(); currentPosition.append(<strong>"纬度:"</strong>).append(location.getLatitude()).append(<strong>"</strong><strong>\n</strong><strong>"</strong>); currentPosition.append(<strong>"经度:"</strong>).append(location.getLongitude()).append(<strong>"</strong><strong>\n</strong><strong>"</strong>); currentPosition.append(<strong>"国家:"</strong>).append(location.getCountry()).append(<strong>"</strong><strong>\n</strong><strong>"</strong>); currentPosition.append(<strong>"省份:"</strong>).append(location.getProvince()).append(<strong>"</strong><strong>\n</strong><strong>"</strong>); currentPosition.append(<strong>"市:"</strong>).append(location.getCity()).append(<strong>"</strong><strong>\n</strong><strong>"</strong>); currentPosition.append(<strong>"区:"</strong>).append(location.getDistrict()).append(<strong>"</strong><strong>\n</strong><strong>"</strong>); currentPosition.append(<strong>"街道:"</strong>).append(location.getStreet()).append(<strong>"</strong><strong>\n</strong><strong>"</strong>); currentPosition.append(<strong>"定位方式:"</strong>);
<strong>if </strong>(location.getLocType()==BDLocation.<strong><em>TypeGpsLocation</em></strong>){ currentPosition.append(<strong>"GPS"</strong>); }<strong>else if </strong>(location.getLocType()==BDLocation.<strong><em>TypeNetWorkLocation</em></strong>){ currentPosition.append(<strong>"网络"</strong>); } Toast.makeText(getApplicationContext(),currentPosition,Toast.<strong><em>LENGTH_SHORT</em></strong>).show(); } } }</string>
即可获得定位信息。如果位置信息返回的是null,可能是initLocation()中的setIsNeedAddress方法的问题。
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号