实现地图实时定位,拯救“路痴”

实时定位,已经成为运用必备才能之一,尤其是导航运用,更需要快速精确定位用户实时方位。

华为定位服务可以赋予运用程序快速、精准地获取用户方位信息的才能,一起定位服务助力全球开发者结束个性化地图呈现与交互,全面提升运用android平板电脑价格的LBS体会。

下面为您具体解析,华为定位android手机服务与地图服务怎样结束运用实时定位。

预期功用

获取人体肠道结构图部位称号实时定位,而且在地图上闪现方位点,初度发动跳转当时方位点,而且方位改动当时方位点和地图视角随之改RTC动。

完成地图实时定位,解救“路痴”

运用才能

华为定位服务: 基础定位

华为地图服务:android是什么手机牌子地图闪现

结束原理

运用华为定位服务获取实时方位,在地图上闪现“我的方位软件库”按钮,在方位改动http 404时,跳转地android电子市场图到当时定位。

app下载备作业

AGC账号注册,项目创建

1. 注册成为开发者

注册地址:

developer.huawei.com/cgoogle服务结构on人体接受的最大电压sumer/cn…

完成地图实时定位,解救“路痴”

2. 创建运用,人头攒动的近义词增加sha25google浏览器6,翻开map/site开关,下载json文件

developer.huawei.com/consumer/cn…

完成地图实时定位,解救“路痴”

3. 装备android studio工程

  1. 将“agconnect-services.json”文google地球件拷贝到运用级根目录下

在“allprojects > repositories”中装备HMS Core Shttp署理DK的Maven仓地址。

在“buildscripthttp 404 > repositories”中装备HMS Core SDK的Maven仓地址。

如果App中增加了“agconnect-sapp下载ervices.json”文件则需要在“bu软件库蓝奏云ildscript > dependencies”中增加agcp装备。

buiRTCldscript {
repositories {
maven { url 'https://developer.huawei.com/repo软件/' }
google()
jcenter()
}
dependencies {
classjson格局怎样翻开path 'com.android下载安装android.tools.build:gradle:3.3.2'
classpath 'com.huawei.agcohttp署理nnect:agcpapprove:1.3.1.300'
}
}
allprojects {
repositories {
maven { u人头攒动的近义词rl 'https://developer.huawei.com/json字符串repo/' }
google()
jcenter()
}
}
  1. 在“dependencies ”中增加如下编译依托

    dependencies {
    implementation ‘com.huawei.hms:maps:{version}’
    imp软件商铺安装lementation ‘com.huawei.hms:location:{version}’
    }

  2. 在文件头增加装备

    applgoogle地球y plugin: ‘com.huawei.agconnect’

  3. 在android中装备签名。将生成签名证书指纹生成的签名文件复制到您工程的app目录下,并在“build.gradgoogle服务结构le”文件中装备签名

    signingConfigs {
    release {
    // 签名证书
    storgoogle空间eFile file(“.“)
    // 密钥库口令
    storePRTCassword “json是什么意思
    // 别号
    keyAlias “json格局怎样翻开

    // 密钥口令
    keyPassword “******”
    v2SignjsoningEnabled true
    v2SigningEnaapp下载bled true
    }
    }

    buildTypes {
    release {
    minifyEnRTCabled false
    proguardFiles getDefaultProguahttp署理rdFile人体成分剖析(‘proguard-android.txt’), ‘proguard-rules.pro’
    debuggable true
    }
    debugoogle空间g {
    debuggable true
    }
    }

要害代码结束

  1. 编写一个service 获取实时定位。

    public classhttp 404 LocationService extends Service {

     private final String TAG = this.getClass().getSappointmentimpleName();
    Listjson接口回来错误&JSONlt;ILocationChandroid体系angedLister> locagoogle谷歌查找主页tionChangedLisapplet = new ArrayList<>();
    // location
    private FusedLocationProviderClient fusedLocationProviderandroid平板电脑价格Client;
    private LocationRequhttp://www.baidu.comest mLocationRequest;
    private final LocationCallback mLocationCallback =JSON new LocationCallb人头攒动的读音ack() {
    @Overri软件商铺安装de
    public void onLocationResult(LocationResult locationResult) {
    super.onLocationResulAPPt(locationResult);
    locationResult.getLocations();
    Log.d(TAG, "onLocationRes软件商铺安装ult: " + locationResult);
    Location location = location软件工程Resulthttp署理.getLohttp协议cations().get(0);
    Log.w(Tandroid的drawable类AG, "onLocationResult:Latitude " + lhttp://www.baidu.comocation.getLatitude人体接受的最大电压());
    Log.w(TAG, "onLocationResult:Lohttp署理ngitude " + location.getLongitude());
    for (ILocationChangedLister logoogle翻译cationChanged : loc人体接受的最大电压ationappreciateChan人体接受的最大电压gedList) {
    locationChanged.locationChangjson格局ed(new LatLng(lo软件应用cation.getLatitude(), location.getLongitude()));
    }
    }
    @Override
    public vo让天秤倒追的星座id onLocat人头攒动的读音ionAvailability(LocationAvailability locationAvailability) {
    super.onLocationAvailability(loAPPcationAvailability);
    Log.dgoogleplay(TAG, "onLocationAvailability: " + locationAvailability.toAPPString());
    }
    };
    private final MyBinder binder = new MyBinder();
    private final Random generator = n闰土刺猹图片ew Random();
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
    return binder;
    }
    @Override
    publi软件工程c void onCreate() {
    Log.i("DemoLog", "TestService -> onCreate, Thread: " + Thread.currentThread().getName());
    super.onCreate();
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int shttp 404tartId) {
    Log.i("DemoLog",
    "TestS软件商铺ervice -> onStartCommand, startId: "json字符串 + startId + ", Thread: " + Thread.currentThread().getName()json文件是干什么的);
    return START_NOT_STICKY;
    }
    @Override
    public boolean onUnbind(Intent intent) {
    Log.i("DemoLog", "TestService软件商铺安装 -> onUnbinGoogled, from:" + intent.ge软件库tSt软件库蓝奏云ringExtra("from"));
    return false;
    }
    @Override
    public void onDestjson格局怎样翻开roy() {
    Log.i("DemoLog", "TestServandroid的drawable类ice -&json格局gt; onDestroy, Thread: " + Thread.currentThread().getName());
    super.onDestroy();
    }
    public inappeart getRandomNumber() {
    return generator.nextInt();
    }
    pu软件技术blic void addLocationChangedliste闰土刺猹r(ILocationChangedLister iLocationChangedLister) {
    locationChangedList.add(iLocationChangedLister人体肠道结构图部位称号);
    }
    publigoogleplay下载c void getMyLogoogle服务结构ction() {软件snapchat
    Log.d(HTTPTAG, "getMyLoction: ");
    fusedLocationProviderClient = LocationServices.getFusedLocationProvijson解析derClient(this);
    SettingsClient settingsClient = LocationServices.getSettingsClient(this);
    LocationSettingsRequest.Builder builder = nRTCew LocationSettingsRequest.Builder();
    mLoca人头攒动的读音tionRequest = new LocationRequest();
    builder.addLocationRequest(mL闰土刺猹图片ocationRequest);
    LocationSettingsRequest loandroid下载安装cationSettingsRequest = bu软件库ilder.build();
    // location setting
    settingsClient.checkLohttp://www.baidu.comcationSettings(locationSettingsRequest)
    .addOnSuccessListener(locationSettingsResponse -> fusedLocationProviderClient
    .requAndroidestandroid的drawable类LocationUpdates(mLocationRequest, mLocationCallback, Looper.getMainLAndroidooper())
    .addOnSuccessListener(aVoid -&g人体成分剖析t; Log.d(TAG, "onSuccess: " + aVoid)))
    .addOnFailureListener(Throwable::printS软件库蓝奏云tackTrace);
    }
    public class MyBinder extends Binder {
    public LocationService getService() {
    return LocationService.this;
    }
    }
    public interface ILocationChangedLister {
    /**
    * Upgoogleplaydate the location information
    *
    * @pargoogle翻译am latLng The new location information
    */
    public void locationChanged(Lajson是什么意思tLng latLng);
    }
    

    }

  2. 在Acti人体接受的最大电压vihttp 404ty中制作地图,监听实时方位

Xml中增加人体肠道结构图部位称号地图:

<com.huawei.hms.maps.MapView
androidgoogle浏览器:id="@+id/map"
andrjson文件是干什么的oid:layout_width="match_parent"
android:layout_height="match_parent" />

activity地图制作:

mapView.onCreate(null);
mapView.ghttp://www.baidu.cometMapAsync(this);

制作是翻开我的方位 按钮闪现

@Ovegoogle空间rride
public void onMapReady(HuaweiMandroid什么意思ap huaweiMap) {appointment
hMap = huaweiMap;
hMap.setMyLocationEnabled(true);
}

人体成分剖析置定位服务绑定监听

private SergoogleplayviceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(Componenandroid下载tName name, IBinder binder) {
isBound = true;
if闰土刺猹图片 (软件库binder instanceof LocationService.MyBinder) {
LocationService.MyBinder myBinder = (LocationService.MyBinder) binder;
locationService = myBinder.getService()软件snapchat;
Log.i(TAG, "ActivityA onServiceC闰土刺猹onnected");
locationappearSeRTCrviceJSON.addLocationChangedlister(iLocationChangedLister);
locationService.gappeareappstoretMyLoction();
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
isBound = false;
locationService = null;
Log.i(TAG, "ActivityA onServiceDiandroid手机sconnected");
}
};

绑定到LocationService:

privateandroid电子市场 void b软件商铺indLocationService() {软件商铺
Intent intent = new Intent(mActivity, LocationService让天秤倒追的星座.class);
intent.putExtra("from", "ActivityA");
Log.i(TAG, "-----app下载--------------------------------------------------------人体肠道结构图部位称号");
Log.i(TAG, "bindService to ActivityA");
mActivity.bindSe人头攒动的读音rvice(intent, conn, Context.BIND_AUTO_CREATE);
}

在方位改动监听中处理 方位改动

LocationService.ILocationCjson格局怎样翻开hangedLister iLocationCh软件技术专业angedLister = new LocationService.ILocationChangedLister() {
@Override
papproachublic void locat人体成分剖析ionChanHTTPged(LatLng latLng) {
Log.d(TAG, "locationChanhttp://www.baidu.comged: " + latLng.latitude);
Ljson格局怎样翻开og.d(TAG, "locationChanged: " + latLng.longitude);
updateLocatio软件库n(latLng);
}
};

更新地图 经纬度视角

private void updateLocation(LatLng latLng) {
mLatLng = latLng;
h软件技术Map.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 1));
}

测验

运用仿照方位软件改动仿照方位,地图视角和我的方位按钮能android什么意思够随之跳动。功用approach结束。

欲了解HMS Core更多概略,请参阅approach
>>华为开发者联盟官网

>>获取开发辅导文档
>>参加开发者讨论请到CSDN社区或许Redandroid是什么手机牌子dit社区
>>下载demo和软件库示例代码请到Github或许Gitee
>>处理集成问题请到Stack Overflow

原文链接:deveandroid/yunosloper.huawei.com/consumer/cn…

原作者:HMS Core官方帐号

发表评论

提供最优质的资源集合

立即查看 了解详情