Android Studio setmylocationenabled(true)抛出SecurityException

时间:2016-02-06 18:00:17

标签: java

我遇到了一个问题。即使我删除了所有权限,我的程序也会破坏SecurityException。 这是MapsActivity类:

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

private GoogleMap mMap;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);}
public void onMapReady(GoogleMap googleMap) {
    try{
    mMap = googleMap;

    // Add a marker in Sydney and move the camera
    LatLng sydney = new LatLng(-34, 151);
    mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
        mMap.setMyLocationEnabled(true);
    mMap.getUiSettings().setMyLocationButtonEnabled(true);


    // set map type

}

这是清单:

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

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<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
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".Interface" />
    <activity android:name=".Main2Activity" />
    <activity android:name=".Main22Activity" />
    <activity android:name=".SFR_Table" />
    <activity android:name=".sfrtable2" />
    <activity android:name=".sfrtable3" />
    <activity android:name=".sfrtable4" />
    <activity android:name=".sfrtable5" />
    <activity android:name=".sfrtable6" />
    <activity android:name=".sfrtable7" />
    <activity android:name=".mySfrs" />
    <activity android:name=".Search_bySiteName" />
    <activity android:name=".Search_byDate" />
    <activity android:name=".Search_byLocation" />
    <activity android:name=".Found_1" />
    <activity android:name=".Found_2" />
    <activity android:name=".Found_3" />
    <activity android:name=".Edit_first" />
    <activity android:name=".Edit_1_2" />
    <activity android:name=".Edit_1_3" />
    <activity android:name=".Edit_1_4" />
    <activity android:name=".Edit_1_5" />
    <activity android:name=".Edit_1_6" />
    <activity android:name=".Edit_1_7" />
    <activity android:name=".testing" />

    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />

    <activity android:name=".Main23Activity" />
    <!--
         The API key for Google Maps-based APIs is defined as a string resource.
         (See the file "res/values/google_maps_api.xml").
         Note that the API key is linked to the encryption key used to sign the APK.
         You need a different API key for each encryption key, including the release key that is used to
         sign the APK for publishing.
         You can define the keys for the debug and release targets in src/debug/ and src/release/. 
    -->
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="AIzaSyA-z6nM3WoXwP7dBzIdz1_dssl8X81xttg" />

    <activity
        android:name=".MapsActivity"
        android:label="@string/title_activity_maps"></activity>
</application>

这是抛出的异常

FATAL EXCEPTION: main                                                                              Process: mazebug.danuleoshaleosha, PID: 13162
                                                                      java.lang.SecurityException: my location requires permission ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION
                                                                          at com.google.maps.api.android.lib6.e.ev.c(Unknown Source)
                                                                          at com.google.android.gms.maps.internal.j.onTransact(SourceFile:274)
                                                                          at android.os.Binder.transact(Binder.java:387)
                                                                          at com.google.android.gms.maps.internal.IGoogleMapDelegate$zza$zza.setMyLocationEnabled(Unknown Source)
                                                                          at com.google.android.gms.maps.GoogleMap.setMyLocationEnabled(Unknown Source)
                                                                          at mazebug.danuleoshaleosha.MapsActivity.onMapReady(MapsActivity.java:51)
                                                                          at com.google.android.gms.maps.SupportMapFragment$zza$1.zza(Unknown Source)
                                                                          at com.google.android.gms.maps.internal.zzo$zza.onTransact(Unknown Source)
                                                                          at android.os.Binder.transact(Binder.java:387)
                                                                          at com.google.android.gms.maps.internal.be.a(SourceFile:82)
                                                                          at com.google.maps.api.android.lib6.e.fb.run(Unknown Source)
                                                                          at android.os.Handler.handleCallback(Handler.java:739)
                                                                          at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                          at android.os.Looper.loop(Looper.java:148)
                                                                          at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                          at java.lang.reflect.Method.invoke(Native Method)
                                                                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

我很困惑,因为我似乎已经授予了所需的权限。 请给我一点建议。谢谢!

1 个答案:

答案 0 :(得分:2)

尝试更改代码。

// Add a marker in Sydney and move the camera
LatLng sydney = new LatLng(-34, 151);
mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) return;
mMap.setMyLocationEnabled(true);
mMap.getUiSettings().setMyLocationButtonEnabled(true);