【发布时间】:2015-02-08 18:03:46
【问题描述】:
我有一个片段,我想在其中显示用户(设备)的当前位置。我使用 Google Map Android API v2。如何获取设备当前的经纬度?
您可以在下面看到我使用的代码。不幸的是,应用程序运行错误,不像我预期的那样。它只显示地图,但没有我设置的标记,也没有当前位置。任何人都可以检查并修复它吗?怎么了?感谢您的帮助!
编辑:
MainFragment.java
public class MainFragment extends Fragment{
private SupportMapFragment mSupportMapFragment;
private GoogleMap mGoogleMap;
public BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
LatLng temp = new LatLng(extras.getDouble("Latitude"),extras.getDouble("Longitude"));
}
};
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
FragmentManager mFragmentManager = getChildFragmentManager();
mSupportMapFragment = (SupportMapFragment) mFragmentManager.findFragmentById(R.id.map_container);
if (mSupportMapFragment == null) {
mSupportMapFragment = SupportMapFragment.newInstance();
mFragmentManager.beginTransaction().replace(R.id.map_container, mSupportMapFragment).commit();
}
//Broadcast/ Filter
IntentFilter filter = new IntentFilter();
filter.addAction(LocationService.BROADCAST_ACTION);
getActivity().registerReceiver(receiver, filter);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
//Start service
getActivity().startService(new Intent(getActivity(),LocationService.class));
}
@Override
public void onResume(){
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "BroadcastReceiver works!");
Bundle extras = intent.getExtras();
final LatLng temp = new LatLng(extras.getDouble("Latitude"),extras.getDouble("Longitude"));
if (mGoogleMap != null) {
mGoogleMap = mSupportMapFragment.getMap();
mGoogleMap.addMarker(new MarkerOptions().position(temp).title("Marker").snippet("Location"));
}
try {
CameraUpdate center = CameraUpdateFactory.newLatLng(temp);
CameraUpdate zoom = CameraUpdateFactory.zoomTo(15f);
mGoogleMap.moveCamera(center);
mGoogleMap.animateCamera(zoom);
}catch (NumberFormatException e) {
//Some code here for exception
}
}
};
}
@Override
public void onDetach() {
super.onDetach();
try {
Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager");
childFragmentManager.setAccessible(true);
childFragmentManager.set(this, null);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
}
fragment_main.xml
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/map_container">
<!-- The map fragments will go here -->
</RelativeLayout>
【问题讨论】:
-
你能添加你的错误日志吗?
-
@Muthu 我在真机上测试过。我测试了我刚刚编写的纬度和经度值并将其缩放,因此在这种情况下它可以工作。我还尝试在具有 Google API 但内存错误的模拟器中进行测试。
-
你好@Muthu 我编辑了我的帖子。现在我只看到地图,它没有显示标记和当前位置。请你再检查一下帖子的代码并说什么错了吗?谢谢,祝您有愉快的一天!
-
如果你愿意,我可以分享我的工作位置服务代码。
-
如果你能给我你的例子@Muthu,我认为这对我很有用。
标签: android google-maps android-fragments google-maps-android-api-2 google-maps-api-2