Arcgis Android(安卓)定位
16lz
2021-01-26
最近开始学习arcgis android开发,从最基本的定位开始来完善一个demo吧~
1.首先是开发环境:
IDE: android studio 3.0.1
2.接下来是依赖项配置,这里采用在线模式配置:
2.1配置project的build.gradle,在allprojects的repositories下添加
maven { url 'http://dl.bintray.com/esri/arcgis' }
添加完成后完整的代码如下:
buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.0.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() jcenter() maven { url 'http://dl.bintray.com/esri/arcgis' } } } task clean(type: Delete) { delete rootProject.buildDir }
2.2配置module的build.gradle,指定使用的arcgis sdk版本
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:25.1.0' implementation 'com.android.support.constraint:constraint-layout:1.1.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' compile 'com.esri.arcgis.android:arcgis-android:10.2.6-2'}
2.3配置无需打包项
packagingOptions{ exclude 'META-INF/LGPL2.1' exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' }
完整的build.gradle如下
apply plugin: 'com.android.application'android { compileSdkVersion 25 defaultConfig { applicationId "com.ovit.arcgis_test" minSdkVersion 19 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } packagingOptions{ exclude 'META-INF/LGPL2.1' exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' }}dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:25.1.0' implementation 'com.android.support.constraint:constraint-layout:1.1.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' compile 'com.esri.arcgis.android:arcgis-android:10.2.6-2'}
3.修改activity布局文件
<?xml version="1.0" encoding="utf-8"?>
4.设置基类BaseActivity
import android.Manifest;import android.content.DialogInterface;import android.content.pm.PackageManager;import android.location.Location;import android.location.LocationListener;import android.os.Bundle;import android.support.v4.app.ActivityCompat;import android.support.v4.content.ContextCompat;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.widget.Toast;import com.esri.android.map.LocationDisplayManager;import com.esri.android.map.MapView;import com.esri.android.map.ags.ArcGISTiledMapServiceLayer;import com.esri.core.geometry.GeometryEngine;import com.esri.core.geometry.Point;import com.esri.core.geometry.SpatialReference;/** * Created by 此生无分起相思 on 2018/6/1. */public class BaseActivity extends AppCompatActivity{ String strMapUrl="http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineCommunity/MapServer"; private MapView mapView = null; private ArcGISTiledMapServiceLayer arcGISTiledMapServiceLayer = null; public void initMap() //初始化地图并完成定位 { this.mapView = (MapView)findViewById(R.id.map); this.arcGISTiledMapServiceLayer = new ArcGISTiledMapServiceLayer(strMapUrl); this.mapView.addLayer(arcGISTiledMapServiceLayer); //加载地图图层 LocationDisplayManager locationDisplayManager = mapView.getLocationDisplayManager();//获取定位类 locationDisplayManager.setShowLocation(true); locationDisplayManager.setAutoPanMode(LocationDisplayManager.AutoPanMode.LOCATION); /*** LocationDisplayManager.AutoPanMode: 设置模式 自动定位到当前位置 * (1) COMPASS:定位到你所在的位置(作为中心位置显示)并按照手机所指向的方向旋转地图(非行驶状态)。 (2)LOCATION:自动定位到你的位置(作为中心位置显示) (3)NAVIGATION:默认情况下,这将图标放置在屏幕底部,并将地图旋转至行驶的方向。 (4)OFF:不会自动定位,它只会简单地显示地图(默认)*/ locationDisplayManager.setShowPings(true); locationDisplayManager.start();//开始定位 } /*----------------------------Toast显示提示框----------------------------------*/ public void show(String t) { Toast.makeText(getApplicationContext(), t, Toast.LENGTH_LONG).show(); }/*----------------------------Toast显示提示框----------------------------------*/ /*----------------------------android 6.0定位权限申请----------------------------------------------------*/ BaseActivity activity = this; //获得activity private static final int Location_Permission = 0; //约定位置权限代码为0 public void requestPermission() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { //询问用户是否拒绝过,如果没有,该方法返回false,如果被拒绝过,该方法返回true if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_COARSE_LOCATION)) { // 用户拒绝过这个权限了,应该提示用户,为什么需要这个权限 new AlertDialog.Builder(this).setTitle("提示:").setMessage("没有定位权限将不能获取当前位置 请完成授权") .setPositiveButton("同意", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); // 用户同意申请 重新申请权限 ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, Location_Permission); } }) .setNegativeButton("拒绝", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); // 用户拒绝申请 } }).show(); } else { // 申请授权。 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, Location_Permission); } } } public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) //权限申请的回调方法 { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == Location_Permission) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { //权限被用户同意,做相应的事情 initMap(); } else { //权限被用户拒绝,做相应事情 } } super.onRequestPermissionsResult(requestCode, permissions, grantResults); }}
5.设置MapActivity
import android.os.Build;import android.os.Bundle;public class MapActivity extends BaseActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_map); if (Build.VERSION.SDK_INT >= 23) { requestPermission(); }else{ initMap(); } }}
至此已可以实现基本定位功能,未完待续~ 更多相关文章
- Android(安卓)BroadcastReceiver 学习笔记
- uses-permission 与 android:maxSdkVersion
- Appium+Python appium启动夜神模拟器定位元素(三)
- android framework之旅(四)去除Usb权限弹窗
- Android常用代码之APK root权限静默安装
- 解决unity 打包在Android(安卓)8.0上启动出现黑屏问题(Android权
- android 6.0 动态权限解决方案
- android 视图结构 呈现给用户的视图
- 转:Android(安卓)测试 Appium、Robotium、monkey等框架或者工具对