0

我想在我的应用程序位置附近获取,但我无法通过谷歌击中网址得到响应。在这里,我分享我的代码,所以请任何人都可以帮助这对我很有帮助。在谷歌地图取附近的位置

public class MainActivity extends FragmentActivity implements LocationListener{ 

    GoogleMap mGoogleMap; 
    Spinner mSprPlaceType; 

    String[] mPlaceType=null; 
    String[] mPlaceTypeName=null; 

    double mLatitude=0; 
    double mLongitude=0; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 


     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main);  

     // Array of place types 
     mPlaceType = getResources().getStringArray(R.array.place_type); 

     // Array of place type names 
     mPlaceTypeName = getResources().getStringArray(R.array.place_type_name); 

     // Creating an array adapter with an array of Place types 
     // to populate the spinner 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, mPlaceTypeName); 

     // Getting reference to the Spinner 
     mSprPlaceType = (Spinner) findViewById(R.id.spr_place_type); 

     // Setting adapter on Spinner to set place types 
     mSprPlaceType.setAdapter(adapter); 

     Button btnFind; 

     // Getting reference to Find Button 
     btnFind = (Button) findViewById(R.id.btn_find); 


     // Getting Google Play availability status 
     int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext()); 


     if(status!=ConnectionResult.SUCCESS){ // Google Play Services are not available 

      int requestCode = 10; 
      Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode); 
      dialog.show(); 

     }else { // Google Play Services are available 

      // Getting reference to the SupportMapFragment 
      SupportMapFragment fragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 

      // Getting Google Map 
      mGoogleMap = fragment.getMap(); 

      // Enabling MyLocation in Google Map 
      mGoogleMap.setMyLocationEnabled(true); 



      // Getting LocationManager object from System Service LOCATION_SERVICE 
      LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 

      // Creating a criteria object to retrieve provider 
      Criteria criteria = new Criteria(); 

      // Getting the name of the best provider 
      String provider = locationManager.getBestProvider(criteria, true); 

      // Getting Current Location From GPS 
      Location location = locationManager.getLastKnownLocation(provider); 

      if(location!=null){ 
        onLocationChanged(location); 
      } 

      locationManager.requestLocationUpdates(provider, 20000, 0, this); 

      // Setting click event lister for the find button 
      btnFind.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 


        int selectedPosition = mSprPlaceType.getSelectedItemPosition(); 
        String type = mPlaceType[selectedPosition]; 
         Log.e("type",">>>>"+type);    

        StringBuilder sb = new StringBuilder("https://maps.googleapis.com/maps/api/place/nearbysearch/json?"); 
        sb.append("location="+28.5158732+","+77.37133510000001); 
        sb.append("&radius=5000"); 
        sb.append("&types="+type); 
        sb.append("&sensor=true"); 
        sb.append("&key=AIzaSyBTcRYgv2gbFEPamHuVyjpRNhSJRVuZhm4"); 


        // Creating a new non-ui thread task to download Google place json data 
        PlacesTask placesTask = new PlacesTask();         

        // Invokes the "doInBackground()" method of the class PlaceTask 
        placesTask.execute(sb.toString()); 


       } 
      }); 

     }  

    } 

    /** A method to download json data from url */ 
    private String downloadUrl(String strUrl) throws IOException{ 
     String data = ""; 
     InputStream iStream = null; 
     HttpURLConnection urlConnection = null; 
     try{ 
       URL url = new URL(strUrl);     


       // Creating an http connection to communicate with url 
       urlConnection = (HttpURLConnection) url.openConnection();     

       // Connecting to url 
       urlConnection.connect();     

       // Reading data from url 
       iStream = urlConnection.getInputStream(); 

       BufferedReader br = new BufferedReader(new InputStreamReader(iStream)); 

       StringBuffer sb = new StringBuffer(); 

       String line = ""; 
       while((line = br.readLine()) != null){ 
         sb.append(line); 
       } 

       data = sb.toString(); 
       Log.e("data",">>>>"+data); 

       br.close(); 

     }catch(Exception e){ 
       Log.d("Exception while downloading url", e.toString()); 
     }finally{ 
       iStream.close(); 
       urlConnection.disconnect(); 
     } 

     return data; 
    }   


    /** A class, to download Google Places */ 
    private class PlacesTask extends AsyncTask<String, Integer, String>{ 

     String data = null; 

     // Invoked by execute() method of this object 
     @Override 
     protected String doInBackground(String... url) { 
      try{ 
       data = downloadUrl(url[0]); 
      }catch(Exception e){ 
       Log.d("Background Task",e.toString()); 
      } 
      return data; 
     } 

     // Executed after the complete execution of doInBackground() method 
     @Override 
     protected void onPostExecute(String result){    
      ParserTask parserTask = new ParserTask(); 

      // Start parsing the Google places in JSON format 
      // Invokes the "doInBackground()" method of the class ParseTask 
      parserTask.execute(result); 
     } 

    } 

    /** A class to parse the Google Places in JSON format */ 
    private class ParserTask extends AsyncTask<String, Integer, List<HashMap<String,String>>>{ 

     JSONObject jObject; 

     // Invoked by execute() method of this object 
     @Override 
     protected List<HashMap<String,String>> doInBackground(String... jsonData) { 

      List<HashMap<String, String>> places = null;    
      PlaceJSONParser placeJsonParser = new PlaceJSONParser(); 

      try{ 
       jObject = new JSONObject(jsonData[0]); 

       /** Getting the parsed data as a List construct */ 
       places = placeJsonParser.parse(jObject); 

      }catch(Exception e){ 
        Log.d("Exception",e.toString()); 
      } 
      return places; 
     } 

     // Executed after the complete execution of doInBackground() method 
     @Override 
     protected void onPostExecute(List<HashMap<String,String>> list){    

      // Clears all the existing markers 
      mGoogleMap.clear(); 

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

       // Creating a marker 
       MarkerOptions markerOptions = new MarkerOptions(); 

       // Getting a place from the places list 
       HashMap<String, String> hmPlace = list.get(i); 

       // Getting latitude of the place 
       double lat = Double.parseDouble(hmPlace.get("lat"));     

       // Getting longitude of the place 
       double lng = Double.parseDouble(hmPlace.get("lng")); 

       // Getting name 
       String name = hmPlace.get("place_name"); 

       // Getting vicinity 
       String vicinity = hmPlace.get("vicinity"); 

       LatLng latLng = new LatLng(lat, lng); 

       // Setting the position for the marker 
       markerOptions.position(latLng); 

       // Setting the title for the marker. 
       //This will be displayed on taping the marker 
       markerOptions.title(name + " : " + vicinity);    

       // Placing a marker on the touched position 
       mGoogleMap.addMarker(markerOptions);    

      }  

     } 

    } 



    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     mLatitude = location.getLatitude(); 
     mLongitude = location.getLongitude(); 
     LatLng latLng = new LatLng(mLatitude, mLongitude); 

     mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 
     mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(12)); 

    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     // TODO Auto-generated method stub 

    } 
} 

我在这里分享我的JSON解析器类将解析它击中网址

import android.util.Log; 

    public class PlaceJSONParser { 

     /** Receives a JSONObject and returns a list */ 
     public List<HashMap<String,String>> parse(JSONObject jObject){  

      JSONArray jPlaces = null; 
      try {   
       /** Retrieves all the elements in the 'places' array */ 
       jPlaces = jObject.getJSONArray("results"); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      /** Invoking getPlaces with the array of json object 
      * where each json object represent a place 
      */ 
      return getPlaces(jPlaces); 
     } 


     private List<HashMap<String, String>> getPlaces(JSONArray jPlaces){ 
      int placesCount = jPlaces.length(); 
      Log.e("place count",">>>>>"+placesCount); 
      List<HashMap<String, String>> placesList = new ArrayList<HashMap<String,String>>(); 
      HashMap<String, String> place = null; 

      /** Taking each place, parses and adds to list object */ 
      for(int i=0; i<placesCount;i++){ 
       try { 
        /** Call getPlace with place JSON object to parse the place */ 
        place = getPlace((JSONObject)jPlaces.get(i)); 
        placesList.add(place); 

       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 

      return placesList; 
     } 

     /** Parsing the Place JSON object */ 
     private HashMap<String, String> getPlace(JSONObject jPlace){ 

      HashMap<String, String> place = new HashMap<String, String>(); 
      String placeName = "-NA-"; 
      String vicinity="-NA-"; 
      String latitude=""; 
      String longitude=""; 


      try { 
       // Extracting Place name, if available 
       if(!jPlace.isNull("name")){ 
        placeName = jPlace.getString("name"); 
       } 

       // Extracting Place Vicinity, if available 
       if(!jPlace.isNull("vicinity")){ 
        vicinity = jPlace.getString("vicinity"); 
       } 

       latitude = jPlace.getJSONObject("geometry").getJSONObject("location").getString("lat"); 
       longitude = jPlace.getJSONObject("geometry").getJSONObject("location").getString("lng");    


       place.put("place_name", placeName); 
       place.put("vicinity", vicinity); 
       place.put("lat", latitude); 
       place.put("lng", longitude); 


      } catch (JSONException e) {   
       e.printStackTrace(); 
      }  
      return place; 
     } 
    } 

来这里我正在共享主要活动的我的XML文件中的数据

<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" 
    tools:context=".MainActivity" > 

    <Spinner 
     android:id="@+id/spr_place_type" 
     android:layout_width="wrap_content" 
     android:layout_height="60dp" 
     android:layout_alignParentTop="true" /> 

    <Button 
     android:id="@+id/btn_find" 
     android:layout_width="wrap_content" 
     android:layout_height="60dp"   
     android:layout_alignParentTop="true" 
     android:layout_toRightOf="@id/spr_place_type" 
     android:text="@string/str_btn_find" />  

    <fragment xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/map" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/spr_place_type" 
     class="com.google.android.gms.maps.SupportMapFragment" /> 

</RelativeLayout> 

//////// 这里我是屏幕截图

这种反应我从URL得到....

{“ERROR_MESSAGE”

点击查找按钮后:“这个IP,网站或移动应用程序没有被授权使用该API密钥。来自IP地址103.233.119.62的请求,空引用者“,”html_attributions“:[],”results“:[],”status“:”REQUEST_DENIED“}

回答

1

给出的代码很好我没有用过浏览器在我的主要活动的关键,如果u有使用谷歌API来获取位置u必须使谷歌Places API的Web服务,你必须获得来自谷歌开发者控制台和使用特定的ID 机器人关键的servery关键主要活动中的服务器密钥manifest.xml中的Android密钥

相关问题