我的地图很好用。我正在尝试添加GPS来定位用户位置。我正在学习本教程[http://www.youtube.com/watch?v=wKz04cs660E],但它对我不起作用。
这是我的Main.java
package com.anilraj.map;
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 android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
public class Main extends MapActivity {
MapView view;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
view = (MapView)findViewById(R.id.mvMain);
view.setBuiltInZoomControls(true);
final MapController control = view.getController();
LocationManager manager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
LocationListener listener = new LocationListener() {
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onLocationChanged(Location location) {
control.setCenter(new GeoPoint((int)location.getLatitude(), (int)location.getLongitude()));
}
};
manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener);
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
这是我的main.xml
<FrameLayout 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=".Main" >
<fragment
android:id="@+id/mvMain"
android:name="com.google.android.gms.maps.MapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</FrameLayout>
关于我的Androidmanifest.xml,我拥有所有必需的权限,使用了功能,库,元数据。
这是我的LogCat
02-20 17:35:09.681: D/AbsListView(6380): Get MotionRecognitionManager
02-20 17:35:09.681: D/AbsListView(6380): onVisibilityChanged() is called, visibility : 8
02-20 17:35:09.681: D/AbsListView(6380): unregisterIRListener() is called
02-20 17:35:09.691: D/AbsListView(6380): onVisibilityChanged() is called, visibility : 8
02-20 17:35:09.691: D/AbsListView(6380): unregisterIRListener() is called
02-20 17:35:09.691: D/AbsListView(6380): onVisibilityChanged() is called, visibility : 0
02-20 17:35:09.691: D/AbsListView(6380): unregisterIRListener() is called
02-20 17:35:09.711: D/AndroidRuntime(6380): Shutting down VM
02-20 17:35:09.711: W/dalvikvm(6380): threadid=1: thread exiting with uncaught exception (group=0x418a4898)
02-20 17:35:09.711: W/ActivityThread(6380): ClassLoader.loadClass: The class loader returned by Thread.getContextClassLoader() may fail for processes that host multiple applications. You should explicitly specify a context class loader. For example: Thread.setContextClassLoader(getClass().getClassLoader());
02-20 17:35:09.721: E/AndroidRuntime(6380): FATAL EXCEPTION: main
02-20 17:35:09.721: E/AndroidRuntime(6380): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.anilraj.map/com.anilraj.map.Main}: java.lang.ClassCastException: android.widget.FrameLayout cannot be cast to com.google.android.maps.MapView
02-20 17:35:09.721: E/AndroidRuntime(6380): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2295)
02-20 17:35:09.721: E/AndroidRuntime(6380): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)
02-20 17:35:09.721: E/AndroidRuntime(6380): at android.app.ActivityThread.access$700(ActivityThread.java:159)
02-20 17:35:09.721: E/AndroidRuntime(6380): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
02-20 17:35:09.721: E/AndroidRuntime(6380): at android.os.Handler.dispatchMessage(Handler.java:99)
02-20 17:35:09.721: E/AndroidRuntime(6380): at android.os.Looper.loop(Looper.java:137)
02-20 17:35:09.721: E/AndroidRuntime(6380): at android.app.ActivityThread.main(ActivityThread.java:5419)
02-20 17:35:09.721: E/AndroidRuntime(6380): at java.lang.reflect.Method.invokeNative(Native Method)
02-20 17:35:09.721: E/AndroidRuntime(6380): at java.lang.reflect.Method.invoke(Method.java:525)
02-20 17:35:09.721: E/AndroidRuntime(6380): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
02-20 17:35:09.721: E/AndroidRuntime(6380): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
02-20 17:35:09.721: E/AndroidRuntime(6380): at dalvik.system.NativeStart.main(Native Method)
02-20 17:35:09.721: E/AndroidRuntime(6380): Caused by: java.lang.ClassCastException: android.widget.FrameLayout cannot be cast to com.google.android.maps.MapView
02-20 17:35:09.721: E/AndroidRuntime(6380): at com.anilraj.map.Main.onCreate(Main.java:24)
02-20 17:35:09.721: E/AndroidRuntime(6380): at android.app.Activity.performCreate(Activity.java:5372)
02-20 17:35:09.721: E/AndroidRuntime(6380): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)
02-20 17:35:09.721: E/AndroidRuntime(6380): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257)
02-20 17:35:09.721: E/AndroidRuntime(6380): ... 11 more
02-20 17:35:12.213: I/Process(6380): Sending signal. PID: 6380 SIG: 9
答案 0 :(得分:0)
<fragment
android:id="@+id/mvMain"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
添加支持片段可以解决问题.Class Cast的其他原因可能是权限
<permission
android:name="com.packagename.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.packagename.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application>
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="YOUR_API_KEY" />
</application>