通过百度API获取经纬度
程序员文章站
2022-05-16 12:23:03
...
第一步,先要导入百度API的架包libBMapApiEngine_v1_3_3.so和baidumapapi.jar,且libBMapApiEngine_v1_3_3.so包要放到armeabi文件夹下,armeabi和baidumapapi.jar平级。
(附件中的libBMapApiEngine_v1_3_3.zip要解压,解压后把libBMapApiEngine_v1_3_3.so包要放到armeabi文件夹下就行了)
第二步,在布局页面里要加上如下代码
第三步:写代码
最后:添加权限
(附件中的libBMapApiEngine_v1_3_3.zip要解压,解压后把libBMapApiEngine_v1_3_3.so包要放到armeabi文件夹下就行了)
第二步,在布局页面里要加上如下代码
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <!-- 使用百度API定位,必须要定义MapView,但又不需要显示 --> <com.baidu.mapapi.MapView android:id="@+id/map_View" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" android:visibility="gone" /> <TextView android:id="@+id/lat" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="纬度:" /> <TextView android:id="@+id/lon" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="经度:" /> </LinearLayout>
第三步:写代码
import android.location.Location; import android.os.Bundle; import android.widget.TextView; import com.baidu.mapapi.BMapManager; import com.baidu.mapapi.LocationListener; import com.baidu.mapapi.MKLocationManager; import com.baidu.mapapi.MapActivity; /** * 创建Activity(继承com.baidu.mapapi.MapActivity) */ public class LocationActivity extends MapActivity implements LocationListener { private BMapManager mapManager; private MKLocationManager mLocationManager = null; private TextView latText; private TextView lonText; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); latText = (TextView) findViewById(R.id.lat); lonText = (TextView) findViewById(R.id.lon); // 初始化MapActivity mapManager = new BMapManager(getApplication()); // init方法的第一个参数需填入申请的API Key mapManager.init("285B415EBAB2A92293E85502150ADA7F03C777C4", null); super.initMapActivity(mapManager); mLocationManager = mapManager.getLocationManager(); // 注册位置更新事件 mLocationManager.requestLocationUpdates(this); // 使用GPS定位 mLocationManager.enableProvider((int) MKLocationManager.MK_GPS_PROVIDER); } @Override protected boolean isRouteDisplayed() { return false; } @Override protected void onDestroy() { if (mapManager != null) { mapManager.destroy(); mapManager = null; } mLocationManager = null; super.onDestroy(); } @Override protected void onPause() { if (mapManager != null) { mapManager.stop(); } super.onPause(); } @Override protected void onResume() { if (mapManager != null) { mapManager.start(); } super.onResume(); } /** * 根据MyLocationOverlay配置的属性确定是否在地图上显示当前位置 */ @Override protected boolean isLocationDisplayed() { return false; } /** * 当位置发生变化时触发此方法 * * @param location 当前位置 */ @Override public void onLocationChanged(Location location) { if (location != null) { // 显示定位结果 lonText.setText("当前经度:" + location.getLongitude()); latText.setText("当前纬度:" + location.getLatitude()); } } }
最后:添加权限
<!-- 访问网络的权限 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- 访问精确位置的权限 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 访问网络状态的权限 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 访问WIFI网络状态的权限 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 改变WIFI网络状态的权限 --> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- 读写存储卡的权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 读取电话状态的权限 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" />