android 高德地图定位(地理位置) 笔记

android studio端代码

MainActivity

package com.andros230.trajectory;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationClientOption.AMapLocationMode;
import com.amap.api.location.AMapLocationListener;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import java.util.HashMap;
import java.util.Map;

public class MainActivity extends Activity implements AMapLocationListener {
    private AMapLocationClient locationClient = null;
    private AMapLocationClientOption locationOption = null;
    private Map<String, String> params;
    private TextView show;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        show = (TextView) findViewById(R.id.tvShow);
        Button save = (Button) findViewById(R.id.save);
        Button history = (Button) findViewById(R.id.history);

        locationClient = new AMapLocationClient(this);
        locationOption = new AMapLocationClientOption();
        locationOption.setLocationMode(AMapLocationMode.Battery_Saving);
        locationClient.setLocationListener(this);
        locationOption.setOnceLocation(true);
        locationClient.setLocationOption(locationOption);
        locationClient.startLocation();

        save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String url = "http://192.168.0.119:8080/web230/aa230";
                RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
                StringRequest postRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        if (response.equals("YES")) {
                            show.setText("保存成功");
                        }
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                    }
                }) {
                    @Override
                    protected Map<String, String> getParams() {
                        return params;
                    }
                };
                requestQueue.add(postRequest);

            }
        });

        history.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setClass(MainActivity.this, history.class);
                MainActivity.this.startActivity(intent);
            }
        });
    }
    // 定位监听
    @Override
    public void onLocationChanged(AMapLocation location) {
        if (null != location && location.getErrorCode() == 0) {
            //获取MAC
            WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
            String Mac = wifi.getConnectionInfo().getMacAddress();
            params = new HashMap<>();
            params.put("Mac", Mac);
            params.put("Longitude", location.getLongitude() + "");
            params.put("Latitude", location.getLatitude() + "");
            params.put("Accuracy", location.getAccuracy() + "");
            params.put("Province", location.getProvince() + "");
            params.put("City", location.getCity() + "");
            params.put("District", location.getDistrict() + "");
            params.put("Address", location.getAddress() + "");
            show.setText("当前位置 " + location.getAddress());
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (null != locationClient) {
            locationClient.onDestroy();
            locationClient = null;
            locationOption = null;
        }
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.andros230.trajectory.MainActivity">

    <TextView
        android:id="@+id/tvShow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="定位中..."
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="保存"
        android:id="@+id/save"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="查看历史"
        android:id="@+id/history"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"/>
</RelativeLayout>


history

package com.andros230.trajectory;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class history extends Activity {
    private ListView list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_history);
        list = (ListView) findViewById(R.id.history_list);

        String url = "http://192.168.0.119:8080/web230/history";
        RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
        StringRequest postRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Gson gson = new Gson();
                List<Map<String, Object>> list2 = gson.fromJson(response, new TypeToken<List<Map<String, Object>>>() {
                }.getType());
                List<String> data = new ArrayList<>();
                for (Map<String, Object> map : list2) {
                    data.add(map.get("time")+" \n"+map.get("add"));
                }
                list.setAdapter(new ArrayAdapter<>(getApplicationContext(), R.layout.andros_list_item, data));


            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
            }
        }) {
            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<>();
                params.put("key", "key");
                return params;
            }
        };
        requestQueue.add(postRequest);
    }
}

activity_history.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:textColor="#000000"
              android:orientation="vertical">

    <ListView
        android:id="@+id/history_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </ListView>

</LinearLayout>

还有自定义列表格式

andros_list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView android:id="@android:id/text1"
          xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:gravity="center_vertical"
          android:textColor="#000000"
          android:textSize="14sp"
    />

导入jar包:


AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.andros230.trajectory"
          xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- 用于进行网络定位 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <!-- 用于访问GPS定位 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <!-- 用于访问网络,网络定位需要上网 -->
    <uses-permission android:name="android.permission.INTERNET"/>
    <!-- 用于读取手机当前的状态 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <!-- 写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

        <activity
            android:name=".history"
            android:theme="@style/AppTheme">
        </activity>

        <service android:name="com.amap.api.location.APSService"/>

        <meta-data
            android:name="com.amap.api.v2.apikey"
            android:value="51cb221b5589f1e068c698bb4d7da400">
        </meta-data>

    </application>
</manifest>


注:高德地图的KEY需要绑定apk的包名和签名密钥的SHA1码才能正常使用,详情查看 高德地图开放平台




服务端

aa230

import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class aa230 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		String Mac = request.getParameter("Mac");
		String Longitude = request.getParameter("Longitude");
		String Latitude = request.getParameter("Latitude");
		String Accuracy = request.getParameter("Accuracy");
		String Province = request.getParameter("Province");
		String City = request.getParameter("City");
		String District = request.getParameter("District");
		String Address = request.getParameter("Address");

		//获取系统当前时间
		Date dt = new Date();
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String Time =df.format(dt);

		DB db = new DB();
		db.update("INSERT INTO trajectory (Mac, Time, Longitude, Latitude, Accuracy, Province, City, District, Address)VALUES('"+Mac+"','"+Time+"','"+Longitude+"','"+Latitude+"','"+Accuracy+"','"+Province+"','"+City+"','"+District+"','"+Address+"')");
		db.close();

		PrintWriter writer = response.getWriter();
		writer.write("YES");
		writer.flush();
		writer.close();
	}
}

history

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.gson.Gson;

public class history extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
		try {
			DB db = new DB();
			ResultSet rs = db.query("SELECT * FROM trajectory order by Time DESC");
			while (rs.next()) {
				Map<String,Object> map = new HashMap<String,Object>();
				map.put("time", rs.getString("Time"));
				map.put("add", rs.getString("Address"));
				
				list.add(map);
			}
			db.close();
		} catch (SQLException e) {	
			e.printStackTrace();
		}
		
		PrintWriter writer = response.getWriter();
		Gson gson =  new Gson();
		writer.write(gson.toJson(list).toString());
		writer.flush();
		writer.close();
	}
}


MySQL数据库字段:





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值