Les problèmes d'autorisation pour l'emplacement dans android Guimauve application
Je suis en train d'apprendre à développer une application android pour obtenir l'emplacement de l'appareil suivant les développeurs de Google forum: @http://developer.android.com/training/location/retrieve-current.html#last-known
@http://developer.android.com/training/location/receive-location-updates.html
L'exemple montre comment utiliser Google PLay Services à cette fin.
Mais le getLastLocation()
fonction retourne toujours null.
Emplacement =
LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
Car au départ, l'emplacement peut être nulle, j'ai ajouté les lignes suivantes à recevoir régulièrement de l'emplacement des mises à jour
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,
mLocationRequest, this);
qui déclenche une Exception avec le Message suivant
Client doit avoir ACCESS_COARSE_LOCATION ou ACCESS_FINE_LOCATION
l'autorisation d'effectuer l'emplacement des opérations
J'ai déjà ajouté les autorisations dans le fichier de manifeste:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
J'ai ouvert Google Maps pour la mise à jour de l'emplacement actuel de Google Play Services, mais le même problème persiste.
Je suis novice de développement Android, et avant de poster cette question j'ai déjà cherché beaucoup mais n'ai pas trouvé de solution de travail pour moi.
Je suis en train de tester sur Android Marshmallow
appareil, le développement de l'aide Android Studio 1.3.2
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="newray.acpsa1">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="@string/google_maps_key" />
<activity
android:name=".MapsActivity"
android:label="@string/title_activity_maps">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
fonction onCreate de l'Activité
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
mGoogleApiClient.connect();
mLocationRequest = LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setInterval(10 * 1000)
.setFastestInterval(1 * 1000);
/* Rest functionality */
}
onConnected fonction
@Override
public void onConnected(Bundle bundle) {
try{
Location location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
LatLng loc = new LatLng(21.356993, 72.826647);
if (location == null) {
Log.d(TAG,"location is again null");
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
Log.d(TAG, "Requested for updates");
}
else {
loc = new LatLng(location.getLatitude(),location.getLongitude());
handleNewLocation(location);
}
} catch (Exception e) {
Log.d(TAG, "Error in onConnected. "+e.getMessage());
}
}
Journaux:
XXXX: Error in onConnected. Client must have ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission to perform any location operations.
dépendances de construction.gradle fichier:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.1.0'
compile 'com.google.android.gms:play-services:8.1.0'
compile 'com.google.android.gms:play-services-location:8.1.0'
}
Merci @DanielNugent. Qui a résolu le problème pour moi
OriginalL'auteur Naveen | 2015-11-07
Vous devez vous connecter pour publier un commentaire.
Dans la Guimauve, il y a beaucoup de nouvelles choses dans le SDK android. Demander au préalable l'autorisation est l'un de c'est nouvelle mise à jour que chaque développeur devrait garder à l'esprit. La même chose se produire avec vous. si votre application cible version 23, alors vous devriez probablement prendre de la subvention de l'utilisateur avant de commencer à l'utiliser. Vous ne pouvez l'utiliser que si l'utilisateur permettent d'accéder.À cet effet développeur a besoin pour prendre soin tous les cas, tout en tenant la permission de l'utilisateur dans l'application
Par exemple vos applications ont besoin d'avoir accès de l'Endroit. Dans la version antérieure d'android à l'heure sur installé c'était de montrer la boîte de dialogue autorisation et qu'ils ont accordé à la définition de l'autorisation dans votre fichier manifeste de l'application. Cette les choses ont changé dans la Guimauve. Maintenant, chaque application doit avoir à prendre l'autorisation de l'utilisateur pour accéder à l'.
Voir le développeur de sites et d'apprendre les étapes de base de la façon de guider l'utilisateur dans l'application pour demander la
runtime permission
dans l'application.Il ya beaucoup de sites montrant votre base tutoriel sur la façon de demander la permission à la Guimauve. quelques-uns peuvent suggérer comme ci-dessous
Renforcement de la demande avec l'exécution de l'autorisation
Les autorisations guide de conception
Ce lien vous guider les informations de base de la façon de guider l'utilisateur dans l'application avant de demander la permission.
Grâce.
Merci @Bhavdip Pathar. Qui a résolu le problème.
OriginalL'auteur Bhavdip Sagar
Et directe de la solution/exemple pour votre question:
Ici, j'ai fait le requestPermission() et checkPermission() méthode public static parce que je peux les réutiliser pour d'autres demandes de permission comme de téléphone à appeler, écrire de stockage, et d'autres. Espérons que cela aidera certains. 🙂
Si c'est tard, mais si ça aide quelqu'un d'autre aussi, @kadik il est int constant que vous avez besoin de définir dans votre application qui est ensuite transmis à vous en fonction onRequestPermissionsResult
Je suis en train de faire quelque chose de similaire, ayant toujours cette question: stackoverflow.com/questions/41206885/...'
OriginalL'auteur Anees U