Android上实现一个简单的天气预报APP(十四) 使用百度API定位城市
2017-02-25 11:44
951 查看
学习参考资源:https://www.gitbook.com/book/zhangqx/mini-weather/details
环境:Android Studio
外部API:使用百度API定位:http://lbsyun.baidu.com/index.php?title=android-locsdk
包名在Manifest中。
数字签名+包名获取AK密钥。
右键BaiduXXX_XXX.jar——点击“Add as Library”
配置build\build.gradle
添加了这条语句后,Android Studio会自动生成一个jniLibs文件夹,将这些库文件方进入去
声明权限
启动这个Activity
在Location类中定义Button并绑定
在MyLocationListener中,一获取数据就将数据更新到Button上。
运行一下!
环境:Android Studio
外部API:使用百度API定位:http://lbsyun.baidu.com/index.php?title=android-locsdk
1)前期准备
1.获取密钥
Android Studio获得数字签名的方法:包名在Manifest中。
数字签名+包名获取AK密钥。
2.导入库文件
在左侧边栏下方的“相关下载”,点击后进入下载界面,下载相应的包,存入app\libs右键BaiduXXX_XXX.jar——点击“Add as Library”
配置build\build.gradle
添加了这条语句后,Android Studio会自动生成一个jniLibs文件夹,将这些库文件方进入去
3.配置Manifest.xml
设置Access Key<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="AK" /> //key:开发者申请的Key
声明权限
<!-- 这个权限用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> <!-- 这个权限用于访问GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <!-- 获取运营商信息,用于支持提供运营商信息相关的接口--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> <!-- 用于读取手机当前的状态--> <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <!-- 访问网络,网络定位需要上网--> <uses-permission android:name="android.permission.INTERNET" /> <!-- SD卡读取权限,用户写入离线定位数据--> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
2)编写我们自己的定位程序
百度定位包类参考:http://wiki.lbsyun.baidu.com/cms/androidloc/doc/v7.0/index.html1.获取定位城市名称
package com.example.xchen.mweather; import android.app.Activity; import android.os.Bundle; import android.util.Log; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; /** * Created by xchen on 16/12/23. */ public class Locate extends Activity{ private LocationClient mLocationClient; private MyLocationListener myLocationListener; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.locate); mLocationClient = new LocationClient(this); myLocationListener = new MyLocationListener(); mLocationClient.registerLocationListener(myLocationListener); initLocation(); mLocationClient.start(); } void initLocation() { LocationClientOption option = new LocationClientOption(); option.setIsNeedAddress(true); option.setOpenGps(true); option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); option.setCoorType("bd09ll"); option.setScanSpan(1000); mLocationClient.setLocOption(option); } } class MyLocationListener implements BDLocationListener{ @Override public void onReceiveLocation(BDLocation bdLocation) { String cityName = bdLocation.getCity(); Log.d("Locate",cityName); } }
启动这个Activity
2.将获取的城市信息更新到界面上
在location布局中,设置了一个Button,这个Button的内容为城市名称在Location类中定义Button并绑定
public class Locate extends Activity{ private LocationClient mLocationClient; private MyLocationListener myLocationListener; Button locateBtn; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.location); locateBtn = (Button)findViewById(R.id.bdmap_cityname); mLocationClient = new LocationClient(this); myLocationListener = new MyLocationListener(locateBtn); mLocationClient.registerLocationListener(myLocationListener); initLocation(); mLocationClient.start(); } void initLocation() { LocationClientOption option = new LocationClientOption(); option.setIsNeedAddress(true); option.setOpenGps(true); option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); option.setCoorType("bd09ll"); option.setScanSpan(1000); mLocationClient.setLocOption(option); } }
在MyLocationListener中,一获取数据就将数据更新到Button上。
public class MyLocationListener implements BDLocationListener { Button locBtn; MyLocationListener(Button locBtn) { this.locBtn = locBtn; } String cityName; @Override public void onReceiveLocation(BDLocation bdLocation) { cityName = bdLocation.getCity(); Log.d("Locate",cityName); locBtn.setText(cityName); } }
3.新增动作-根据获取的城市名称,根据数据库表找到对应的城市代码,并更新主界面天气数据
类似于我们前面,通过城市选择列表,点击Item获取城市代码,并更新天气主界面。运行一下!
相关文章推荐
- Android上实现一个简单的天气预报APP(七) 切换到新的界面(选择城市界面)
- Android上实现一个简单的天气预报APP(十一) Preference存储最近一次查询的城市
- Android上实现一个简单的天气预报APP(八) 从数据库读取城市数据
- Android上实现一个简单的天气预报APP(九) ListView展示城市列表、单击更新天气数据
- Android上实现一个简单的天气预报APP(十) 城市列表搜索框
- Android上实现一个简单的天气预报APP(一) 设计
- Android上实现一个简单的天气预报APP(四) 添加按钮点击响应
- Android上实现一个简单的天气预报APP(二) 配置布局
- Android上实现一个简单的天气预报APP(十二) 未来三天的天气预报
- Android 端天气预报APP的实现(六)使用DrawerLayout展示城市数据
- Android 系统api实现定位及使用百度提供的api来实现定位
- Android上实现一个简单的天气预报APP(五) 解析XML
- Android上实现一个简单的天气预报APP(十三) 导航ViewPager
- Android上实现一个简单的天气预报APP(三) 获取网络数据
- Android上实现一个简单的天气预报APP(十五) 发布天气预报APP
- Android 系统api实现定位及使用百度提供的api来实现定位
- Android上实现一个简单的天气预报APP(六) 更新界面数据
- Android 端天气预报APP的实现(七)实现城市定位功能
- Android中使用百度API定位,并实现手势操作(显示最后点击地图的位置)
- Android入门:使用Android GPS实现简单的定位