gpt4 book ai didi

android - 如何找到我当前位置附近的位置?

转载 作者:太空狗 更新时间:2023-10-29 15:30:18 25 4
gpt4 key购买 nike

我需要一些关于“如何使用 android 找到我所在位置附近的医院、学校、餐厅”的想法,这怎么可能?

最佳答案

一步一步,

Google place api 用于访问附近的地标

第 1 步:前往 API 控制台获取 Place API

https://code.google.com/apis/console/

然后在服务选项卡上选择

Service

就地服务

enter image description here

现在选择 API Access 选项卡并获取 API KEY

enter image description here

现在你有一个获取位置的 API key


正在编程

*步骤 2 *:首先创建一个名为 Place.java 的类。该类用于包含 Place api 提供的 place 属性。

package com.android.code.GoogleMap.NearsetLandmark;

import java.util.logging.Level;
import java.util.logging.Logger;
import org.json.JSONException;
import org.json.JSONObject;


public class Place {
private String id;
private String icon;
private String name;
private String vicinity;
private Double latitude;
private Double longitude;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getIcon() {
return icon;
}

public void setIcon(String icon) {
this.icon = icon;
}

public Double getLatitude() {
return latitude;
}

public void setLatitude(Double latitude) {
this.latitude = latitude;
}

public Double getLongitude() {
return longitude;
}

public void setLongitude(Double longitude) {
this.longitude = longitude;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getVicinity() {
return vicinity;
}

public void setVicinity(String vicinity) {
this.vicinity = vicinity;
}

static Place jsonToPontoReferencia(JSONObject pontoReferencia) {
try {
Place result = new Place();
JSONObject geometry = (JSONObject) pontoReferencia.get("geometry");
JSONObject location = (JSONObject) geometry.get("location");
result.setLatitude((Double) location.get("lat"));
result.setLongitude((Double) location.get("lng"));
result.setIcon(pontoReferencia.getString("icon"));
result.setName(pontoReferencia.getString("name"));
result.setVicinity(pontoReferencia.getString("vicinity"));
result.setId(pontoReferencia.getString("id"));
return result;
} catch (JSONException ex) {
Logger.getLogger(Place.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}

@Override
public String toString() {
return "Place{" + "id=" + id + ", icon=" + icon + ", name=" + name + ", latitude=" + latitude + ", longitude=" + longitude + '}';
}

}

现在创建一个名为 PlacesService 的类

package com.android.code.GoogleMap.NearsetLandmark;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.util.Log;


public class PlacesService {

private String API_KEY;

public PlacesService(String apikey) {
this.API_KEY = apikey;
}

public void setApiKey(String apikey) {
this.API_KEY = apikey;
}

public List<Place> findPlaces(double latitude, double longitude,String placeSpacification)
{

String urlString = makeUrl(latitude, longitude,placeSpacification);


try {
String json = getJSON(urlString);

System.out.println(json);
JSONObject object = new JSONObject(json);
JSONArray array = object.getJSONArray("results");


ArrayList<Place> arrayList = new ArrayList<Place>();
for (int i = 0; i < array.length(); i++) {
try {
Place place = Place.jsonToPontoReferencia((JSONObject) array.get(i));

Log.v("Places Services ", ""+place);


arrayList.add(place);
} catch (Exception e) {
}
}
return arrayList;
} catch (JSONException ex) {
Logger.getLogger(PlacesService.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
//https://maps.googleapis.com/maps/api/place/search/json?location=28.632808,77.218276&radius=500&types=atm&sensor=false&key=<key>
private String makeUrl(double latitude, double longitude,String place) {
StringBuilder urlString = new StringBuilder("https://maps.googleapis.com/maps/api/place/search/json?");

if (place.equals("")) {
urlString.append("&location=");
urlString.append(Double.toString(latitude));
urlString.append(",");
urlString.append(Double.toString(longitude));
urlString.append("&radius=1000");
// urlString.append("&types="+place);
urlString.append("&sensor=false&key=" + API_KEY);
} else {
urlString.append("&location=");
urlString.append(Double.toString(latitude));
urlString.append(",");
urlString.append(Double.toString(longitude));
urlString.append("&radius=1000");
urlString.append("&types="+place);
urlString.append("&sensor=false&key=" + API_KEY);
}


return urlString.toString();
}

protected String getJSON(String url) {
return getUrlContents(url);
}

private String getUrlContents(String theUrl)
{
StringBuilder content = new StringBuilder();

try {
URL url = new URL(theUrl);
URLConnection urlConnection = url.openConnection();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()), 8);
String line;
while ((line = bufferedReader.readLine()) != null)
{
content.append(line + "\n");
}

bufferedReader.close();
}

catch (Exception e)
{

e.printStackTrace();

}

return content.toString();
}
}

现在创建一个新的 Activity,您希望在其中获取最近地点的列表。

/** * */

    package com.android.code.GoogleMap.NearsetLandmark;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;


import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.drawable.Drawable;
import android.location.Address;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import com.android.code.R;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;

/**
* @author dwivedi ji *
* */
public class CheckInActivity extends ListActivity {

private String[] placeName;
private String[] imageUrl;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);




new GetPlaces(this,getListView()).execute();
}

class GetPlaces extends AsyncTask<Void, Void, Void>{
Context context;
private ListView listView;
private ProgressDialog bar;
public GetPlaces(Context context, ListView listView) {
// TODO Auto-generated constructor stub
this.context = context;
this.listView = listView;
}

@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
bar.dismiss();
this.listView.setAdapter(new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, placeName));

}

@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
bar = new ProgressDialog(context);
bar.setIndeterminate(true);
bar.setTitle("Loading");
bar.show();


}

@Override
protected Void doInBackground(Void... arg0) {
// TODO Auto-generated method stub
findNearLocation();
return null;
}

}
public void findNearLocation() {

PlacesService service = new PlacesService("past your key");

/*
Hear you should call the method find nearst place near to central park new delhi then we pass the lat and lang of central park. hear you can be pass you current location lat and lang.The third argument is used to set the specific place if you pass the atm the it will return the list of nearest atm list. if you want to get the every thing then you should be pass "" only
*/

/* hear you should be pass the you current location latitude and langitude, */
List<Place> findPlaces = service.findPlaces(28.632808,77.218276,"");

placeName = new String[findPlaces.size()];
imageUrl = new String[findPlaces.size()];

for (int i = 0; i < findPlaces.size(); i++) {

Place placeDetail = findPlaces.get(i);
placeDetail.getIcon();

System.out.println( placeDetail.getName());
placeName[i] =placeDetail.getName();

imageUrl[i] =placeDetail.getIcon();

}





}


}

关于android - 如何找到我当前位置附近的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7344581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com