web-dev-qa-db-fra.com

Autorisation ACCESS_FINE_LOCATION

J'ai peu honte. Mais je ne peux pas trouver ce qui ne va pas.

<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.szymon.gpslab1"
Android:versionCode="15"
Android:versionName="4.0.3">

<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission Android:name="Android.permission.INTERNET"/>

<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"
        Android:label="@string/app_name"
        Android:theme="@style/AppTheme.NoActionBar" >
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />

            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
</manifest>

C'est mon manifeste. et voici mon code:

public class MainActivity extends AppCompatActivity {
LocationManager locationManager;
LocationListener locationListener;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locationListener = new MyLocationListener();

    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
}
private class MyLocationListener implements LocationListener{

    @Override
    public void onLocationChanged(Location location) {
        System.out.println("ZMIENIAMY SIĘ, zmieniamy siebie");
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {

    }

    @Override
    public void onProviderEnabled(String provider) {

    }

    @Override
    public void onProviderDisabled(String provider) {

    }
}
}

J'utilise le plus récent Android studio (intellij) avec émulateur intégré (?). Le téléphone est hors options. Et voici ce que j'ai:

FATAL EXCEPTION: main  
Process: com.example.szymon.gpslab1, PID: 3274  
Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.szymon.gpslab1/com.example.szymon.gpslab1.MainActivity}: Java.lang.SecurityException: "gps" location provider requires ACCESS_FINE_LOCATION permission.  

Caused by: Java.lang.SecurityException: "gps" location provider requires ACCESS_FINE_LOCATION permission.  

Je crois que c'est une erreur stupide, mais je n'ai jamais aimé développé pour Android, je suis le javaman, et j'ai atteint tous les tutoriels sur le net, je ne trouve pas de réponse.

Ah et y, j'ai un emplacement dans mon émulateur.

11
Sarseth

Il s'agit d'une exception courante si votre SDK cible est 23 dans votre build.gradle.

Android 6.0/sdk 23 introduit une nouvelle façon de demander des autorisations.

Voir le lien ci-dessous pour savoir comment gérer les autorisations:

https://developer.Android.com/training/permissions/index.html

25