最近开始学习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();        }    }}
至此已可以实现基本定位功能,未完待续~

更多相关文章

  1. Android(安卓)BroadcastReceiver 学习笔记
  2. uses-permission 与 android:maxSdkVersion
  3. Appium+Python appium启动夜神模拟器定位元素(三)
  4. android framework之旅(四)去除Usb权限弹窗
  5. Android常用代码之APK root权限静默安装
  6. 解决unity 打包在Android(安卓)8.0上启动出现黑屏问题(Android权
  7. android 6.0 动态权限解决方案
  8. android 视图结构 呈现给用户的视图
  9. 转:Android(安卓)测试 Appium、Robotium、monkey等框架或者工具对

随机推荐

  1. 取消程序在最近六项中显示以及直接调用信
  2. android典型代码系列(十二)------删除某
  3. android cocos2d-x libjson
  4. 一起学android opengl之光照
  5. Android(安卓)ContentProvider共享数据
  6. [Android-Demo]Android(安卓)View的拖动
  7. Android中广播注册与接收流程
  8. Android(安卓)ListView字母索引(仿微信通
  9. android 公共顶部栏
  10. cordova3+sencha touch2.x 环境搭建