定位
本单元介绍显示DaxiMap地图的最简单的Android是咧
添加密钥(Key)#
在application中添加开发密钥
<application>
<meta-data android:name="com.daximap.mapapi.appkey" android:value="开发者 key" />
修改配置#
修改application中配置
<applicatoin
...
android:usesCleartextTraffic="true"
/>
增加运行访问沙盒的配置
<meta-data android:name="ScopedStorage" android:value="true" />
添加所需权限#
使用DXMapSDK需要添加读写权限和网络访问权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
// 自定义缓存目录添加下面两个
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
// 访问蓝牙的权限
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
// 定位的权限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
初始化DaxiLocation SDK#
在应用程序创建时初始化 SDK引用的Context 全局变量,注意这个MainApplication需要在AndroidManifest.xml里注册
public class MainApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
//初始化SDK
DXSDK.init(this);
// 设置Token,在地图管理页面获取
DXSDK.setToken("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
DXSDK.setConfigVersion(3);
}
}
将application对应的类改为MainApplication
<application
android:name="com.daxi.map3d.demo.MainApplication" />
public class MainActivity extends Activity {
DXMap mMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//在android 6.0以上的系统中地图需要动态申请权限
DXPermissionVerifyHelper.requestEssentialPermissions(this, new DXPermissionVerifyListener(){
@Override
public void hasPermission(List<String> granted, boolean isAll) {
if (!isAll) return;
// 所有权限都已经获取
initLocation();
startLocation();
}
@Override
public void noPermission(List<String> denied, boolean quick) {
}
});
}
// 初始化定位
private void initLocation(){
try {
final Context context = this;
mLocationClient = new DXLocationClient();
DXLocationClientOption locationOption = getDefaultOption();
mLocationClient.initialize(context, locationOption);
mLocationClient.setLocationListener(new DXLocationListener() {
@Override
public boolean onCreate() {
return false;
}
@Override
public void onStartLocationSuccessful() {
Toast.makeText(context, "开始定位", Toast.LENGTH_SHORT).show();
}
@Override
public void onStartLocationFailed(int code) {
if(code == 1){
// GPS permission denied
Toast.makeText(context, "没有获得GPS定位权限", Toast.LENGTH_SHORT).show();
}else if(code == 2){
// Permission granted but GPS switch off
Toast.makeText(context, "没有打开GPS", Toast.LENGTH_SHORT).show();
}else if(code == 6){
// Beacon permission denied
Toast.makeText(context, "没有获得蓝牙权限", Toast.LENGTH_SHORT).show();
}else if(code == 7){
// ermission granted but beacon switch off
Toast.makeText(context, "没有打开蓝牙", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onLocationChanged(DXLocation location) {
//以下代码为示例,具体使用可以查看 DxLocation返回的内部参数 选择自己所需要的
Calendar ca = Calendar.getInstance();
int day = ca.get(Calendar.DAY_OF_MONTH);
int hour = ca.get(Calendar.HOUR_OF_DAY);
int min = ca.get(Calendar.MINUTE);
int second = ca.get(Calendar.SECOND);
DecimalFormat decimalFormat = new DecimalFormat("###################.########");
String floorName = location.mFloorId;//"";
final String str = day + " " + hour + ":" + min + ":" + second + " 坐标:" + decimalFormat.format(location.longitude)
+ "," + decimalFormat.format(location.latitude)
+ "," + location.mBDID
+ "," + floorName
+ "," + location.CheckPointResult
+ "," + location.mLastBleUpateTimeStamp
+ "\n";
Log.d(TAG, "onScanResult:" + str);
}
@Override
public void onDidEnterRegion(String geoName) {
}
@Override
public void onDidExitRegion(String geoName) {
}
@Override
public void onBeaconDataUpdated(DXBeaconDevice device) {
}
@Override
public void onSensorDataUpdated(String data) {
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
//开始定位
private void startLocation(){
try {
//根据控件的选择,重新设置定位参数
// resetOption();
// 设置定位参数
// mLocationClient.setLocationOption(locationOption);
// 启动定位
mLocationClient.startLocation();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onBackPressed() {
if (mMap != null) {
mMap.onDestroy();
}
super.onBackPressed();
}
}