2012-02-05 38 views
0

我尝试使用Google maps API开发Android地图应用程序。java.lang.SecurityException:提供者gps需要ACCESS_FINE_LOCATION权限

使用Google API测试几个emulatet Android设备(2.1; 2.3.3; 4.0.3)。

的问题是,logcat中抛出这个我:

02-05 04:39:57.519: E/AndroidRuntime(588): FATAL EXCEPTION: main 
02-05 04:39:57.519: E/AndroidRuntime(588): java.lang.RuntimeException: Unable to start activity ComponentInfo{map.test.activity/map.test.activity.MapTestActivity}: java.lang.SecurityException: Provider gps requires ACCESS_FINE_LOCATION permission 
02-05 04:39:57.519: E/AndroidRuntime(588): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
02-05 04:39:57.519: E/AndroidRuntime(588): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
02-05 04:39:57.519: E/AndroidRuntime(588): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
02-05 04:39:57.519: E/AndroidRuntime(588): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
02-05 04:39:57.519: E/AndroidRuntime(588): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-05 04:39:57.519: E/AndroidRuntime(588): at android.os.Looper.loop(Looper.java:130) 
02-05 04:39:57.519: E/AndroidRuntime(588): at android.app.ActivityThread.main(ActivityThread.java:3683) 
02-05 04:39:57.519: E/AndroidRuntime(588): at java.lang.reflect.Method.invokeNative(Native Method) 
02-05 04:39:57.519: E/AndroidRuntime(588): at java.lang.reflect.Method.invoke(Method.java:507) 
02-05 04:39:57.519: E/AndroidRuntime(588): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
02-05 04:39:57.519: E/AndroidRuntime(588): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
02-05 04:39:57.519: E/AndroidRuntime(588): at dalvik.system.NativeStart.main(Native Method) 
02-05 04:39:57.519: E/AndroidRuntime(588): Caused by: java.lang.SecurityException: Provider gps requires ACCESS_FINE_LOCATION permission 
02-05 04:39:57.519: E/AndroidRuntime(588): at android.os.Parcel.readException(Parcel.java:1322) 
02-05 04:39:57.519: E/AndroidRuntime(588): at android.os.Parcel.readException(Parcel.java:1276) 
02-05 04:39:57.519: E/AndroidRuntime(588): at android.location.ILocationManager$Stub$Proxy.requestLocationUpdates(ILocationManager.java:646) 
02-05 04:39:57.519: E/AndroidRuntime(588): at android.location.LocationManager._requestLocationUpdates(LocationManager.java:582) 
02-05 04:39:57.519: E/AndroidRuntime(588): at android.location.LocationManager.requestLocationUpdates(LocationManager.java:446) 
02-05 04:39:57.519: E/AndroidRuntime(588): at map.test.activity.MapTestActivity.onCreate(MapTestActivity.java:29) 
02-05 04:39:57.519: E/AndroidRuntime(588): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
02-05 04:39:57.519: E/AndroidRuntime(588): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
02-05 04:39:57.519: E/AndroidRuntime(588): ... 11 more 

下面是代码:

package map.test.activity; 

import android.content.Context; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 

import com.google.android.maps.GeoPoint; 
import com.google.android.maps.MapActivity; 
import com.google.android.maps.MapController; 
import com.google.android.maps.MapView; 

public class MapTestActivity extends MapActivity { 

    private MapController mapController; 
    private MapView mapView; 
    private LocationManager locationManager; 

    public void onCreate(Bundle bundle) { 
     super.onCreate(bundle); 
     setContentView(R.layout.main); // bind the layout to the activity 

     mapView = (MapView) findViewById(R.id.mapview); 
     mapView.setBuiltInZoomControls(true); 
     mapController = mapView.getController(); 
     mapController.setZoom(10); // Zoom 1 is world view 
     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 
         0, new GeoUpdateHandler()); 
    } //public void 

    @Override 
    protected boolean isRouteDisplayed() { 
     return false; 
    }// protected boolean 

    public class GeoUpdateHandler implements LocationListener { 

      public void onLocationChanged(Location location) { 
        int lat = (int) (location.getLatitude() * 1E6); 
        int lng = (int) (location.getLongitude() * 1E6); 
        GeoPoint point = new GeoPoint(lat, lng); 
        mapController.animateTo(point); 
      } 

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

      } 

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

      } 

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

      } 
    } 

} //public class MapTestActivity 

且相应的清单:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="map.test.activity" android:versionCode="1" 
    android:versionName="1.0"> 

    <uses-permission android:name="android.permission.INTERNET"></uses-permission> 
    <uses-permission android:name="android.permission.ACCES_COARSE_LOCATION"></uses-permission> 
    <uses-permission android:name="android.permission.ACCES_FINE_LOCATION"></uses-permission> 

    <uses-sdk android:minSdkVersion="10" /> 

    <application android:icon="@drawable/ic_launcher" android:label="@string/app_name"> 
     <activity android:name=".MapTestActivity" android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <uses-library android:required="true" android:name="com.google.android.maps" /> 
    </application> 
</manifest> 

我已经尝试转变的位置的权限并将编译器设置为JAVA 1.6(并将@Override添加到最后三个公共空隙中)。 这可能是非常明显的东西,但我刚开始用Java开发。

回答

-1

非常愚蠢的错误,你已经完成。你不能从OnCreate()方法上面的行删除"@Override“。加入该行并尝试再次运行代码。

+0

不幸的是我不断收到同样的错误。 – Teonee 2012-02-05 06:56:40

+0

@Override只是一个注释,建议使用它来指定重写,但对相关代码的操作没有直接影响... – 2012-02-05 07:07:59

+0

谢谢@Rahulgarg ..... – Lucifer 2012-02-05 11:36:51

7

拼错

<uses-permission android:name="android.permission.ACCES_COARSE_LOCATION"></uses-permission> 
<uses-permission android:name="android.permission.ACCES_FINE_LOCATION"></uses-permission> 

应该

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
+0

不会修复错误。不过谢谢。 – Teonee 2012-02-05 08:07:49

+1

你可以给出logcat错误消息,解决此问题后.... – 2012-02-05 09:39:51

+1

罚款位置权限应该解决此问题。你确定它仍然产生相同的异常吗? – tomwhipple 2012-04-05 19:21:43

1

我得到了完全相同的错误消息,因为你做过,但在我的情况下,原来是因为我刚刚使用

permission 

代替

uses-permission 

希望这会一个下午救人调试;-)

7

确保使用的许可元素不是在应用程序中的元素。我不小心将它粘贴在那里,Android Studio不会告诉你这是一个问题。一旦我将其移出,它就解决了这个问题。

例子:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.android.someapp.app" > 

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

    <application ...> 

... 
相关问题