Android开发之定位功能实现方案
白羽 2018-06-04 来源 :网络 阅读 793 评论 0

摘要:本文将带你了解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频道!


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程