2017-10-15 90 views
2

我将PlacePicker小部件添加到我的应用程序,现在我可以获取选定的位置经度和纬度。 有了这个代码:PlacePicker获取设备位置和选定的距离和时间路的位置

public class TravelFragment extends Fragment { 

    int PLACE_PICKER_REQUEST = 1; 
    TextView lat; 
    TextView lng; 

    public TravelFragment() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     final FragmentActivity activity = getActivity(); 

     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.fragment_travel, container, false); 

     lat = (TextView) view.findViewById(R.id.latitudeValue); 
     lng = (TextView) view.findViewById(R.id.longitudeValue); 

     Button findLocation = (Button) view.findViewById(R.id.buttonSearchLocation); 

     findLocation.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder(); 
       try { 
        startActivityForResult(builder.build(activity), PLACE_PICKER_REQUEST); 
       } catch (GooglePlayServicesRepairableException e) { 
        e.printStackTrace(); 
       } catch (GooglePlayServicesNotAvailableException e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 


     return view; 
    } 

    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == PLACE_PICKER_REQUEST) { 
      if (resultCode == RESULT_OK) { 

       double arrivalLat; 
       double arrivalLng; 
       String stringLat; 
       String stringLng; 


       Place place = PlacePicker.getPlace(data, getActivity()); 
       arrivalLat = place.getLatLng().latitude; 
       arrivalLng = place.getLatLng().longitude; 
       stringLat = Double.toString(arrivalLat); 
       stringLng = Double.toString(arrivalLng); 

       lat.setText(stringLat); 
       lng.setText(stringLng); 

       String toastMsg = String.format("Place: %s", place.getLatLng()); 

       // place.getLatLng(); 

       Toast.makeText(getActivity(), toastMsg, Toast.LENGTH_LONG).show(); 
      } 
     } 
    } 

} 

如果我也明白这是使用HTTP请求,Google地图,让近的地方是一回事吗?

但我在地图上看到Picker用蓝点找到我的设备,我想知道是否可以获取我的设备的坐标,或者我需要获取设备坐标的其他东西。

如果我需要别的东西来检索设备位置,这是使用3G连接和GSP来做这件事的最佳方式?

无论如何,获得千米距离和时间旅行的唯一方法是使用HTTP请求?

+2

如果位置已启用,您可以用'onLationChanged'方法来获得当前所在位置的经纬度,你也可以使用你的位置和所选地点的位置,通过使用方向HTTPS请求找到公里的距离和时间。获得当前位置的最佳方式是FusedLocationProvider,它对3g和gps非常有用。 –

+0

启用位置在哪里? (抱歉,我是新的谷歌地图API) 你可以发布一些代码? 好吧,所以获得道路距离的唯一方法是使用HTTP请求和一些JSON解析器来获取信息 – Dario

+1

我说过,根据您的帖子,您已经说过placepicker会发现我的设备有蓝点。这意味着该位置已启用。是的,距离和时间与解析通过https请求从谷歌地图获得的信息的json解析器一起工作。 –

回答

0

在Android应用中获取位置的最佳方式是使用Google Play服务位置API,文档编号为https://developer.android.com/training/location/index.html

您可以通过一次调用来检索设备的最后一个已知位置,以及添加一个监听器以随时间接收设备位置更新的方法。

就你而言,你可能想要检索设备的最后一个已知位置。有关代码示例的详细分步文档,请参阅https://developer.android.com/training/location/retrieve-current.html

  • 您需要按照“创建位置服务客户端”部分所述创建融合位置提供程序客户端对象。您将在onCreate()方法中添加该代码。
  • 要真正获取位置,请使用“获取最近已知位置”部分中的示例代码。显示Toast消息后,您将此代码放入onActivityResult()方法中。
+0

更改位置设置和获取最后一个已知位置之间的区别是什么? 我只是第二个? 请问你可以发布一些代码示例,因为文档比较差。 我需要我发布的片段中的用户位置。 – Dario

+0

我更新了我的答案,以提供有关在哪里可以找到示例代码以及如何将其集成到您的应用中的更多详细信息。 –

+0

非常感谢! – Dario

相关问题