增加经纬度及地理位置上传

chengzhenyu 6 years ago
parent
commit
388a32a7b1

+ 1 - 0
app/build.gradle

@@ -87,6 +87,7 @@ dependencies {
87 87
     compile files('libs/commons-lang-2.6.jar')
88 88
     compile files('libs/jcc-bate-0.7.3.jar')
89 89
     compile 'com.umeng.analytics:analytics:latest.integration'
90
+    compile files('libs/AMap_Location_V3.2.0_20161205.jar')
90 91
 }
91 92
 buildscript {
92 93
     repositories {

BIN
app/libs/AMap_Location_V3.2.0_20161205.jar


BIN
app/libs/armeabi/libgdinamapv4sdk752.so


BIN
app/libs/armeabi/libgdinamapv4sdk752ex.so


+ 9 - 0
app/src/main/AndroidManifest.xml

@@ -36,6 +36,15 @@
36 36
             android:name="UMENG_APPKEY"
37 37
             android:value="58bbdceda3251102a9000251"></meta-data>
38 38
 
39
+        <meta-data
40
+            android:name="com.amap.api.v2.apikey"
41
+            android:value="aa78182204ca5666e723137321bb99b5"></meta-data>
42
+
43
+        <!-- 定位需要的服务 -->
44
+        <service android:name="com.amap.api.location.APSService" />
45
+
46
+        <service android:name=".service.MyLocationService" />
47
+
39 48
         <activity
40 49
             android:name=".splash.SplashActivity"
41 50
             android:configChanges="keyboardHidden|orientation|screenSize"

+ 142 - 0
app/src/main/java/ai/pai/lensman/service/MyLocationService.java

@@ -0,0 +1,142 @@
1
+package ai.pai.lensman.service;
2
+
3
+import android.app.Service;
4
+import android.content.Intent;
5
+import android.os.Bundle;
6
+import android.os.Handler;
7
+import android.os.IBinder;
8
+import android.os.Message;
9
+
10
+import com.amap.api.location.AMapLocation;
11
+import com.amap.api.location.AMapLocationClient;
12
+import com.amap.api.location.AMapLocationClientOption;
13
+import com.amap.api.location.AMapLocationListener;
14
+import com.android.common.utils.LogHelper;
15
+
16
+
17
+
18
+public class MyLocationService extends Service implements Handler.Callback{
19
+
20
+    private AMapLocationClient locationClient = null;
21
+    private AMapLocationClientOption locationOption = new AMapLocationClientOption();
22
+
23
+    public static final int COMMAND_START_LOCATION = 9801;
24
+    public static final int COMMAND_DESTROY_LOCATION = 9803;
25
+
26
+    private static final int MSG_FETCH_TOUR_INFO = 4567;
27
+    private static final int MSG_START_LOCATION = 4568;
28
+
29
+    private Handler mHandler;
30
+
31
+    private static final String TAG = "定位";
32
+
33
+    @Override
34
+    public void onCreate() {
35
+        super.onCreate();
36
+        LogHelper.d(TAG,"服务启动");
37
+        mHandler = new Handler(this);
38
+    }
39
+
40
+    @Override
41
+    public IBinder onBind(Intent intent) {
42
+        return null;
43
+    }
44
+
45
+    @Override
46
+    public int onStartCommand(Intent intent, int flags, int startId) {
47
+        if(intent == null){
48
+            return super.onStartCommand(intent,flags,startId);
49
+        }
50
+        Bundle bundle= intent.getExtras();
51
+        if(bundle==null){
52
+            return super.onStartCommand(intent, flags, startId);
53
+        }
54
+        int command = bundle.getInt("command",0);
55
+        initLocation();
56
+        mHandler.sendEmptyMessageDelayed(MSG_FETCH_TOUR_INFO,5000);
57
+        switch (command) {
58
+            case COMMAND_START_LOCATION:
59
+                startLocation();
60
+                break;
61
+            case COMMAND_DESTROY_LOCATION:
62
+                destroyLocation();
63
+                break;
64
+        }
65
+        return START_STICKY;
66
+    }
67
+
68
+    @Override
69
+    public void onDestroy() {
70
+        super.onDestroy();
71
+        destroyLocation();
72
+    }
73
+
74
+
75
+    private void initLocation(){
76
+        if(locationClient!=null){
77
+            return;
78
+        }
79
+        locationClient = new AMapLocationClient(getApplicationContext());
80
+        locationClient.setLocationOption(getDefaultOption());
81
+        locationClient.setLocationListener(locationListener);
82
+    }
83
+
84
+
85
+
86
+    private AMapLocationClientOption getDefaultOption(){
87
+        AMapLocationClientOption mOption = new AMapLocationClientOption();
88
+        mOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//可选,设置定位模式,可选的模式有高精度、仅设备、仅网络。默认为高精度模式
89
+        mOption.setGpsFirst(false);//可选,设置是否gps优先,只在高精度模式下有效。默认关闭
90
+        mOption.setHttpTimeOut(30000);//可选,设置网络请求超时时间。默认为30秒。在仅设备模式下无效
91
+        mOption.setInterval(30*1000);//可选,设置定位间隔。默认为30秒
92
+        mOption.setNeedAddress(true);//可选,设置是否返回逆地理地址信息。默认是true
93
+        mOption.setOnceLocation(true);//可选,设置是否单次定位。默认是false
94
+        mOption.setOnceLocationLatest(false);//可选,设置是否等待wifi刷新,默认为false.如果设置为true,会自动变为单次定位,持续定位时不要使用
95
+        AMapLocationClientOption.setLocationProtocol(AMapLocationClientOption.AMapLocationProtocol.HTTP);//可选, 设置网络请求的协议。可选HTTP或者HTTPS。默认为HTTP
96
+        mOption.setSensorEnable(false);//可选,设置是否使用传感器。默认是false
97
+        mOption.setWifiScan(true); //可选,设置是否开启wifi扫描。默认为true,如果设置为false会同时停止主动刷新,停止以后完全依赖于系统刷新,定位位置可能存在误差
98
+        return mOption;
99
+    }
100
+
101
+    AMapLocationListener locationListener = new AMapLocationListener() {
102
+        @Override
103
+        public void onLocationChanged(AMapLocation loc) {
104
+            if(loc.getErrorCode()==AMapLocation.ERROR_CODE_FAILURE_LOCATION_PERMISSION){
105
+                return;
106
+            }
107
+            double lat = loc.getLatitude();
108
+            double lon = loc.getLongitude();
109
+            LogHelper.d(TAG,"上报经纬度 lat = "+lat+"lon="+lon+" 位置 ="+loc.getAddress());
110
+        }
111
+    };
112
+
113
+
114
+    private void startLocation(){
115
+        initLocation();
116
+        LogHelper.d(TAG,"当前是旅行模式,开始定位");
117
+        locationClient.setLocationOption(locationOption);
118
+        locationClient.startLocation();
119
+    }
120
+
121
+
122
+    private void destroyLocation(){
123
+        if (null != locationClient) {
124
+            locationClient.stopLocation();
125
+            locationClient.onDestroy();
126
+            locationClient = null;
127
+            locationOption = null;
128
+        }
129
+        mHandler.removeCallbacksAndMessages(null);
130
+    }
131
+
132
+    @Override
133
+    public boolean handleMessage(Message msg) {
134
+        if(msg.what == MSG_FETCH_TOUR_INFO){
135
+            return true;
136
+        }else if(msg.what == MSG_START_LOCATION){
137
+            startLocation();
138
+            return true;
139
+        }
140
+        return false;
141
+    }
142
+}