安卓學習之學生簽到APP(一)


 一、學生定位簽到頁面

 

具體實現步驟:

1.1 高德地圖申請key

1、創建新應用

進入高德地圖api控制台,創建一個新應用。如果您之前已經創建過應用,可直接跳過這個步驟。

2、添加新Key

在創建的應用上點擊"添加新Key"按鈕,在彈出的對話框中,依次:輸入應用名名稱,選擇綁定的服務為“Android平台SDK”,輸入發布版安全碼  SHA1、調試版安全碼 SHA1、及 Package,如下圖所示:

 

 獲取key

 

附:SHA1碼的獲取

 

1.2 實現高德地圖自動定位---准備工作

1、下載jar包,導入jar包

  首先去高德地圖API官網下載好相關SDK jar文件,將下載的定位 SDK jar 文件復制到工程(此處截圖以官方示例Demo為例子)的 libs 目錄下,如果有老版本定位 jar 文件存在,請刪除。

注:

  • 第一個是2D地圖的jar包,因為最后定位以后我要在地圖上標出來位置
  • 第二個是用於定位的jar包

對於每個jar文件,右鍵-選擇Add As Library,導入到工程中。或者使用菜單欄 選擇 File ->Project Structure->Modules-> Dependencies。點擊綠色的加號選擇File dependency. 然后選擇要添加的jar包即可,此時build.gradle中會自動生成如下信息。 

  

2、配置AndroidMainfest.xml文件
<!-- 申請必要的權限-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

<application
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"

        >
        <!--設置key-->
        <meta-data
            android:name="com.amap.api.v2.apikey"
            android:value="這里填寫第一步你申請的那個key" />
        <!--聲明定位service-->
        <service android:name="com.amap.api.location.APSService"></service>
</application>
AndroidMainfest.xml

 

3、Activity的布局文件
<com.amap.api.maps2d.MapView
        android:id="@+id/map_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </com.amap.api.maps2d.MapView>

    <Button
        android:id="@+id/requet"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="簽到"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
activity_main

 

4.

  1 package com.cqvie.android_map;
  2 
  3 import android.content.DialogInterface;
  4 import android.icu.text.SimpleDateFormat;
  5 import android.os.Bundle;
  6 import android.os.Handler;
  7 import android.os.Message;
  8 import android.support.v7.app.AlertDialog;
  9 import android.support.v7.app.AppCompatActivity;
 10 import android.util.Log;
 11 import android.view.View;
 12 import android.widget.Button;
 13 import android.widget.Toast;
 14 
 15 import com.amap.api.location.AMapLocation;
 16 import com.amap.api.location.AMapLocationClient;
 17 import com.amap.api.location.AMapLocationClientOption;
 18 import com.amap.api.location.AMapLocationListener;
 19 import com.amap.api.maps2d.AMap;
 20 import com.amap.api.maps2d.CameraUpdateFactory;
 21 import com.amap.api.maps2d.LocationSource;
 22 import com.amap.api.maps2d.MapView;
 23 import com.amap.api.maps2d.UiSettings;
 24 import com.amap.api.maps2d.model.BitmapDescriptorFactory;
 25 import com.amap.api.maps2d.model.LatLng;
 26 import com.amap.api.maps2d.model.MarkerOptions;
 27 import com.cqvie.options.HttpUtilsHttpURLConnection;
 28 
 29 import org.json.JSONException;
 30 import org.json.JSONObject;
 31 
 32 import java.util.Date;
 33 import java.util.HashMap;
 34 import java.util.Map;
 35 
 36 
 37 public class MainActivity extends AppCompatActivity implements LocationSource, AMapLocationListener {
 38 
 39     private MapView mapView = null;
 40     private AMap aMap;
 41     private Button request;
 42     private AMapLocationClient mLocationClient;
 43     private AMapLocationClientOption mLocationOption;
 44     private OnLocationChangedListener mListener;
 45     //標識,用於判斷是否只顯示一次定位信息和用戶重新定位
 46     private boolean isFirstLoc = true;
 47     String date=null;
 48 
 49     @Override
 50     protected void onCreate(Bundle savedInstanceState) {
 51         super.onCreate(savedInstanceState);
 52         setContentView(R.layout.activity_main);
 53 
 54         //獲取地圖控件引用
 55         mapView = (MapView) findViewById(R.id.map_view);
 56         //在activity執行onCreate時執行mMapView.onCreate(savedInstanceState),實現地圖生命周期管理
 57         mapView.onCreate(savedInstanceState);
 58         //獲取簽到按鈕
 59         request = (Button) findViewById(R.id.requet);
 60 
 61         init();
 62         //初始化定位
 63         mLocationClient = new AMapLocationClient(getApplicationContext());
 64         mLocationClient.setLocationListener(this);
 65         //初始化定位參數
 66         mLocationOption = new AMapLocationClientOption();
 67         // mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Device_Sensors);
 68         mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
 69         //設置是否返回地址信息(默認返回地址信息)
 70         mLocationOption.setNeedAddress(true);
 71         //設置是否只定位一次
 72         mLocationOption.setOnceLocation(true);
 73         //設置是否強制刷新WiFi
 74         mLocationOption.setWifiScan(true);
 75         //設置定位間隔,單位毫秒,默認為2000ms
 76         //mLocationOption.setInterval(2000);
 77         //給定位客戶端對象設置定位參數
 78         mLocationClient.setLocationOption(mLocationOption);
 79         //啟動定位
 80         mLocationClient.startLocation();
 81     }
 82 
 83     private void init() {
 84         if (aMap == null) {
 85             aMap = mapView.getMap();
 86             UiSettings settings = aMap.getUiSettings();
 87             aMap.setLocationSource(this);
 88             settings.setMyLocationButtonEnabled(true);
 89             aMap.setMyLocationEnabled(true);
 90         }
 91     }
 92 
 93 
 94     @Override
 95     protected void onDestroy() {
 96         super.onDestroy();
 97         //在activity執行onDestroy時執行mMapView.onDestroy(),實現地圖生命周期管理
 98         mapView.onDestroy();
 99         //mLocationClient.stopLocation();
100         mLocationClient.onDestroy();
101     }
102 
103     @Override
104     protected void onResume() {
105         super.onResume();
106         //在activity執行onResume時執行mMapView.onResume (),實現地圖生命周期管理
107         mapView.onResume();
108     }
109 
110     @Override
111     protected void onPause() {
112         super.onPause();
113         //在activity執行onPause時執行mMapView.onPause (),實現地圖生命周期管理
114         mapView.onPause();
115     }
116 
117     @Override
118     protected void onSaveInstanceState(Bundle outState) {
119         super.onSaveInstanceState(outState);
120         //在activity執行onSaveInstanceState時執行mMapView.onSaveInstanceState (outState),實現地圖生命周期管理
121         mapView.onSaveInstanceState(outState);
122     }
123 
124     //    @RequiresApi(api = Build.VERSION_CODES.N)
125     @Override
126     public void onLocationChanged(final AMapLocation aMapLocation) {
127 
128         if (aMapLocation!=null){
129             if (aMapLocation.getErrorCode()==0){
130                 //定位成功回調信息,設置相關消息
131                 aMapLocation.getLocationType();
132                 aMapLocation.getLatitude();//獲取緯度
133                 aMapLocation.getLongitude();//獲取經度
134                 aMapLocation.getAccuracy();//獲取精度信息
135                 SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
136                 Date nowdate = new Date(aMapLocation.getTime());
137                 date = df.format(nowdate);//定位時間
138                 aMapLocation.getAddress();//地址,如果option中設置isNeedAddress為false,則沒有此結果,網絡定位結果中會有地址信息,GPS定位不返回地址信息。
139                 aMapLocation.getCountry();//國家信息
140                 aMapLocation.getProvince();//省信息
141                 aMapLocation.getCity();//城市信息
142                 aMapLocation.getDistrict();//城區信息
143                 aMapLocation.getStreet();//街道信息
144                 aMapLocation.getStreetNum();//街道門牌號信息
145                 //aMapLocation.getBuildingId();//獲取當前室內定位的建築物Id
146                 //aMapLocation.getAccuracy();//獲取精度信息
147                 aMapLocation.getPoiName();
148                 aMapLocation.getAoiName();
149 
150                 //Log.d("why", String.valueOf(aMapLocation.getAoiName()));
151 //                if (isFirstLoc){
152                 //設置縮放級別
153                 aMap.moveCamera(CameraUpdateFactory.zoomTo(17));
154                 //將地圖移動到定位點
155                 aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude())));
156                 //點擊定位按鈕 能夠將地圖的中心移動到定位點
157                 mListener.onLocationChanged(aMapLocation);
158                 //獲取定位信息
159                 final StringBuffer buffer = new StringBuffer();
160                 buffer.append(aMapLocation.getCountry() + ""
161                         //+ aMapLocation.getProvince() + ""
162                         + aMapLocation.getCity() + ""
163                         // + aMapLocation.getProvince() + ""
164                         + aMapLocation.getDistrict() + ""
165                         + aMapLocation.getStreet() + ""
166                         + aMapLocation.getStreetNum());
167 
168 
169                 Toast.makeText(getApplicationContext(), buffer.toString() + aMapLocation.getAoiName(), Toast.LENGTH_LONG).show();
170                 //Log.d("tzk",buffer.toString());
171 
172                 isFirstLoc = false;
173             }
174         }
175         else {
176             Log.d("why", String.valueOf(aMapLocation.getErrorCode()));
177             //顯示錯誤信息ErrCode是錯誤碼,errInfo是錯誤信息,詳見錯誤碼表。
178             Log.e("AmapError", "location Error, ErrCode:"
179                     + aMapLocation.getErrorCode() + ", errInfo:"
180                     + aMapLocation.getErrorInfo());
181             Toast.makeText(getApplicationContext(), "定位失敗", Toast.LENGTH_LONG).show();
182         }
183 
184         request.setOnClickListener(new View.OnClickListener() {
185             @Override
186             public void onClick(View view) {
187                 new AlertDialog.Builder(MainActivity.this)
188                         .setTitle("簽到")
189                         .setMessage(date+ "\n" + aMapLocation.getAoiName())
190                         .setPositiveButton("確定?", new DialogInterface.OnClickListener() {
191                             @Override
192                             public void onClick(DialogInterface dialogInterface, int i) {
193                                 //新頁面接收數據
194                                 Bundle bundle = MainActivity.this.getIntent().getExtras();
195                                 //接收name值
196                                 String name = bundle.getString("name");
197                                 //Toast.makeText(MainActivity.this,date,Toast.LENGTH_LONG).show();
198                                 signClickListen(date,name,aMapLocation.getAoiName());
199 
200                             }
201                         })
202                         .show();
203             }
204         });
205     }
206 
207     //激活定位
208     @Override
209     public void activate(OnLocationChangedListener onLocationChangedListener) {
210         mListener = onLocationChangedListener;
211     }
212 
213     @Override
214     public void deactivate() {
215         mListener = null;
216     }
217 
218     /**
219      * 簽到點擊事件
220      */
221     public void signClickListen(final String date,final  String name,final String signaddress) {
222         new Thread(new Runnable() {
223             @Override
224             public void run() {
225                 String url = HttpUtilsHttpURLConnection.BASE_URL + "/SignServlet";
226                 Map<String, String> params = new HashMap<String, String>();
227                 Message msg = new Message();
228                 Bundle data = new Bundle();
229                 params.put("signtime",date);
230                 params.put("name", name);
231                 params.put("signaddress", signaddress);
232                 String result = HttpUtilsHttpURLConnection.getContextByHttp(url, params);
233                 msg.what = 0x12;
234                 data.putString("result", result);
235                 msg.setData(data);
236                 hander.sendMessage(msg);
237             }
238             Handler hander = new Handler() {
239                 @Override
240                 public void handleMessage(Message msg) {
241                     if (msg.what == 0x12) {
242                         Bundle data = msg.getData();
243                         String key = data.getString("result");//得到json返回的json
244 //                                   Toast.makeText(MainActivity.this,key,Toast.LENGTH_LONG).show();
245                         try {
246                             JSONObject json = new JSONObject(key);
247                             String result = (String) json.get("result");
248                             if ("success".equals(result)) {
249                                 Toast.makeText(MainActivity.this,name + "簽到成功!", Toast.LENGTH_SHORT).show();
250 
251                             } else if ("error".equals(result)) {
252                                 Toast.makeText(MainActivity.this,name + "簽到失敗!", Toast.LENGTH_SHORT).show();
253                             }
254                         } catch (JSONException e) {
255                             e.printStackTrace();
256                         }
257                     }
258                 }
259             };
260         }).start();
261     }
262 }
MainActivity

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM