/
MainActivity.cs
569 lines (441 loc) · 15.9 KB
/
MainActivity.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
using System;
using Android.App;
using Android.Content.PM;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Com.Amap.Api.Maps;
using Com.Amap.Api.Location;
using Com.Amap.Api.Maps.Model;
using Com.Amap.Api.Navi;
using System.Security.Permissions;
using Com.Amap.Api.Navi.Model;
using Com.Autonavi.Tbt;
using System.Collections.Generic;
using Xamarin.Forms;
using SampleApp.Views;
using Com.Amap.Api.Services.Weather;
using SampleApp.Models;
using Com.Amap.Api.Track;
using Com.Amap.Api.Track.Query.Model;
namespace SampleApp.Droid
{
[Activity(Label = "SampleApp", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity, IAMapNaviListener
{
//3dmap相关
public MapView mapView;
//定位相关
public AMapLocationClient mLocationClient;
private MyLocationStyle myLocationStyle;
//导航相关
public AMapNavi navi;
public AMapNaviView mAMapNaviView;
public Android.Widget.RelativeLayout naviRelativeLayout;
//存储算路起点的列表 故宫坐标
protected List<NaviLatLng> sList = new List<NaviLatLng>() { new NaviLatLng( 39.917834, 116.397036) };
//存储算路终点的列表 广州塔坐标
protected List<NaviLatLng> eList = new List<NaviLatLng>() { new NaviLatLng( 23.106414, 113.324553) };
//猎鹰相关
private AMapTrackClient mAMapTrackClient;
protected override void OnCreate(Bundle savedInstanceState)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(savedInstanceState);
//3dmap相关
mapView = new MapView(this);
mapView.OnCreate(savedInstanceState);
//定位相关
mLocationClient = new AMapLocationClient(this);
mLocationClient.SetLocationListener(new AMapLocationListener());
mLocationClient.StartLocation();
myLocationStyle = new MyLocationStyle();
myLocationStyle.InvokeInterval(2000);
mapView.Map.MyLocationStyle = myLocationStyle;
mapView.Map.MyLocationEnabled = true;
myLocationStyle.InvokeMyLocationType(MyLocationStyle.LocationTypeFollow);
myLocationStyle.ShowMyLocation(true);
//导航相关
navi = AMapNavi.GetInstance(this);
navi.AddAMapNaviListener(this);
navi.SetEmulatorNaviSpeed(260);//260km/h
naviRelativeLayout = LayoutInflater.Inflate(Resource.Layout.NaviLayout, null) as Android.Widget.RelativeLayout;
mAMapNaviView = naviRelativeLayout.FindViewById<AMapNaviView>(Resource.Id.navi_view);
mAMapNaviView.SetAMapNaviViewListener(new AMapNaviViewListener());
mAMapNaviView.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
MessagingCenter.Subscribe<object>(this, SearchPage.QueryWeather, sender =>
{
//检索参数为城市和天气类型,实况天气为WEATHER_TYPE_LIVE、天气预报为WEATHER_TYPE_FORECAST
var mquery = new WeatherSearchQuery("北京", WeatherSearchQuery.WeatherTypeLive);
var mweathersearch = new WeatherSearch(this);
mweathersearch.SetOnWeatherSearchListener(new OnWeatherSearchListener());
mweathersearch.Query=mquery;
mweathersearch.SearchWeatherAsyn(); //异步搜索
});
MessagingCenter.Subscribe<object>(this, TrackPage.StartTrack, sender =>
{
//猎鹰相关
mAMapTrackClient = new AMapTrackClient(this);
//上报周期,采用默认,不设置
//mAMapTrackClient.SetInterval
//本地缓存大小,采用默认,不设置
//mAMapTrackClient.SetCacheSize
//定位模式,采用默认,不设置
//mAMapTrackClient.SetLocationMode
//执行一次,创建serviceid即可
//await (Xamarin.Forms.Application.Current as App).CreateServiceId();
//await (Xamarin.Forms.Application.Current as App).ServiceId();
//137618从ServiceId()获取后复制的
mAMapTrackClient.QueryTerminal(new QueryTerminalRequest(137618, "id1234"), new OnTrackListener(137618, "id1234", mAMapTrackClient));
});
LoadApplication(new App());
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
protected override void OnResume()
{
base.OnResume();
mAMapNaviView.OnResume();
}
protected override void OnPause()
{
base.OnPause();
mAMapNaviView.OnPause();
}
protected override void OnDestroy()
{
base.OnDestroy();
mAMapNaviView.OnDestroy();
}
public void OnUpdateTrafficFacilityWithAMapNaviTrafficFacilityInfo(AMapNaviTrafficFacilityInfo p0)
{
}
public void OnUpdateTrafficFacilityWithAMapNaviTrafficFacilityInfoArray(AMapNaviTrafficFacilityInfo[] p0)
{
}
public void OnUpdateTrafficFacilityWithTrafficFacilityInfo(TrafficFacilityInfo p0)
{
}
public void HideCross()
{
}
public void HideLaneInfo()
{
}
public void HideModeCross()
{
}
public void NotifyParallelRoad(int p0)
{
}
public void OnArriveDestination()
{
}
public void OnArrivedWayPoint(int p0)
{
}
public void OnCalculateRouteFailureWithAMapCalcRouteResult(AMapCalcRouteResult p0)
{
Console.WriteLine("规划路径失败:" + p0.ErrorCode + p0.ErrorDetail);
}
public void OnCalculateRouteFailureWithInt(int p0)
{
Console.WriteLine("规划路径失败:" + p0);
}
public void OnCalculateRouteSuccessWithAMapCalcRouteResult(AMapCalcRouteResult p0)
{
Console.WriteLine("规划路径成功");
}
public void OnCalculateRouteSuccessWithIntArray(int[] p0)
{
Console.WriteLine("规划路径成功");
}
public void OnEndEmulatorNavi()
{
}
public void OnGetNavigationTextWithIntAndString(int p0, string p1)
{
}
public void OnGetNavigationTextWithString(string p0)
{
}
public void OnGpsOpenStatus(bool p0)
{
}
public void OnInitNaviFailure()
{
}
public void OnInitNaviSuccess()
{
Console.WriteLine("导航初始化成功");
int strategy = 0;
try
{
strategy = navi.StrategyConvert(true, false, false, false, false);
}
catch (Exception e)
{
Console.WriteLine("规划路径错误:" + e.Message);
}
navi.CalculateDriveRoute(sList, eList,null, strategy);
}
public void OnLocationChange(AMapNaviLocation p0)
{
}
public void OnNaviInfoUpdate(NaviInfo p0)
{
}
public void OnNaviInfoUpdated(AMapNaviInfo p0)
{
}
public void OnNaviRouteNotify(AMapNaviRouteNotifyData p0)
{
}
public void OnPlayRing(int p0)
{
}
public void OnReCalculateRouteForTrafficJam()
{
}
public void OnReCalculateRouteForYaw()
{
}
public void OnServiceAreaUpdate(AMapServiceAreaInfo[] p0)
{
}
public void OnStartNavi(int p0)
{
}
public void OnTrafficStatusUpdate()
{
}
public void ShowCross(AMapNaviCross p0)
{
}
public void ShowLaneInfoWithAMapLaneInfo(AMapLaneInfo p0)
{
}
public void ShowLaneInfoWithAMapLaneInfoArrayAndByteArrayAndByteArray(AMapLaneInfo[] p0, byte[] p1, byte[] p2)
{
}
public void ShowModeCross(AMapModelCross p0)
{
}
public void AMapNaviListenerUpdateAimlessModeCongestionInfo(AimLessModeCongestionInfo p0)
{
}
public void AMapNaviListenerUpdateAimlessModeStatistics(AimLessModeStat p0)
{
}
public void UpdateCameraInfo(AMapNaviCameraInfo[] p0)
{
}
public void UpdateIntervalCameraInfo(AMapNaviCameraInfo p0, AMapNaviCameraInfo p1, int p2)
{
}
}
public class AMapLocationListener : Java.Lang.Object, IAMapLocationListener
{
public void OnLocationChanged(AMapLocation p0)
{
if (p0 != null)
{
if (p0.ErrorCode == 0)
{
//解析定位结果
}
}
}
}
public class AMapNaviViewListener : Java.Lang.Object, IAMapNaviViewListener
{
public void OnLockMap(bool p0)
{
}
public void OnMapTypeChanged(int p0)
{
}
public bool OnNaviBackClick()
{
return true;
}
public void OnNaviCancel()
{
}
public void OnNaviMapMode(int p0)
{
}
public void OnNaviSetting()
{
}
public void OnNaviTurnClick()
{
}
public void OnNaviViewLoaded()
{
}
public void OnNaviViewShowMode(int p0)
{
}
public void OnNextRoadClick()
{
}
public void OnScanViewButtonClick()
{
}
}
public class OnWeatherSearchListener : Java.Lang.Object, WeatherSearch.IOnWeatherSearchListener
{
public void OnWeatherForecastSearched(LocalWeatherForecastResult p0, int p1)
{
}
public void OnWeatherLiveSearched(LocalWeatherLiveResult weatherLiveResult, int rCode)
{
if (rCode == 1000)
{
if (weatherLiveResult != null && weatherLiveResult.LiveResult != null)
{
var weatherlive = weatherLiveResult.LiveResult;
var model = new WeatherModel
{
ReportTime= weatherlive.ReportTime,
Humidity= weatherlive.Humidity,
Temperature= weatherlive.Temperature,
Weather= weatherlive.Weather,
WindDirection= weatherlive.WindDirection,
WindPower= weatherlive.WindPower
};
//发回给forms层
MessagingCenter.Send(new object(), SearchPage.QueryWeatherOk, model);
}
else
{
//ToastUtil.show(WeatherSearchActivity.this, R.string.no_result);
Console.WriteLine("查询天气无数据");
}
}
else
{
Console.WriteLine("查询天气错误:" + rCode);
}
}
}
public class OnTrackListener : Java.Lang.Object, IOnTrackListener
{
private AMapTrackClient mAMapTrackClient;
private string terminalName;
private long serviceId;
public OnTrackListener(long p0,string p1,AMapTrackClient aMapTrackClient)
{
terminalName = p1;
serviceId = p0;
mAMapTrackClient = aMapTrackClient;
}
public void OnAddTrackCallback(AddTrackResponse p0)
{
}
public void OnCreateTerminalCallback(AddTerminalResponse p0)
{
}
public void OnDistanceCallback(DistanceResponse p0)
{
}
public void OnHistoryTrackCallback(HistoryTrackResponse p0)
{
}
public void OnLatestPointCallback(LatestPointResponse p0)
{
}
public void OnParamErrorCallback(ParamErrorResponse p0)
{
}
public void OnQueryTerminalCallback(QueryTerminalResponse queryTerminalResponse)
{
if (queryTerminalResponse.IsSuccess!=true)
{
Console.WriteLine(queryTerminalResponse.ErrorCode);
Console.WriteLine(queryTerminalResponse.ErrorDetail);
Console.WriteLine(queryTerminalResponse.ErrorMsg);
}
if (queryTerminalResponse.IsSuccess)
{
if (queryTerminalResponse.Tid<=0)
{
mAMapTrackClient.AddTerminal(new AddTerminalRequest(terminalName, serviceId), new OnTrackListener2(mAMapTrackClient, serviceId));
}
else
{
mAMapTrackClient.StartTrack(new TrackParam(serviceId, queryTerminalResponse.Tid), new OnTrackLifecycleListener());
}
}
}
public void OnQueryTrackCallback(QueryTrackResponse p0)
{
}
}
public class OnTrackListener2 : Java.Lang.Object, IOnTrackListener
{
private AMapTrackClient mAMapTrackClient;
private long mserviceId;
public OnTrackListener2(AMapTrackClient aMapTrackClient,long serviceid)
{
mserviceId = serviceid;
mAMapTrackClient = aMapTrackClient;
}
public void OnAddTrackCallback(AddTrackResponse p0)
{
}
public void OnCreateTerminalCallback(AddTerminalResponse addTerminalResponse)
{
if (addTerminalResponse.IsSuccess)
{
mAMapTrackClient.StartTrack(new TrackParam(mserviceId, addTerminalResponse.Tid), new OnTrackLifecycleListener());
}
}
public void OnDistanceCallback(DistanceResponse p0)
{
}
public void OnHistoryTrackCallback(HistoryTrackResponse p0)
{
}
public void OnLatestPointCallback(LatestPointResponse p0)
{
}
public void OnParamErrorCallback(ParamErrorResponse p0)
{
}
public void OnQueryTerminalCallback(QueryTerminalResponse p0)
{
}
public void OnQueryTrackCallback(QueryTrackResponse p0)
{
}
}
public class OnTrackLifecycleListener : Java.Lang.Object, IOnTrackLifecycleListener
{
public void OnBindServiceCallback(int p0, string p1)
{
MessagingCenter.Send(new object(), TrackPage.BindServiceFinished, p1);
}
public void OnStartGatherCallback(int p0, string p1)
{
}
public void OnStartTrackCallback(int p0, string p1)
{
MessagingCenter.Send(new object(), TrackPage.StartTrackFinished, p1);
}
public void OnStopGatherCallback(int p0, string p1)
{
}
public void OnStopTrackCallback(int p0, string p1)
{
}
}
}