studio - permisos android manifest
ACCESS_FINE_LOCATION Los permisos de AndroidManifest no se conceden (3)
Estoy tratando de utilizar GPS en Android (2.2 y 2.3) pero me aparece el siguiente error cuando intento usar el objeto LocationManager:
WARN/System.err(522): java.lang.SecurityException: Provider network requires ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION permission
He investigado el problema en otras publicaciones y generalmente se deben a problemas con AndroidManifest.xml. Sin embargo, el mío parece estar bien:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.thedigitalsean.examples"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".GetLocation"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permisssion.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permisssion.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permisssion.INTERNET"></uses-permission>
</manifest>
Aquí está la línea de código ofensiva en mi método onCreate en la Actividad GetLocation, encerrada en un bloque try / catch:
LocationManager locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
final LocationListener locListener = new MyLocListener();
try{
locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locListener);
}
catch (SecurityException se){
((TextView)findViewById(R.id.infobox)).setText(se.toString());
se.printStackTrace();
}
Esta es la primera aplicación que escribí en la que necesito solicitar permisos de Android y hasta ahora no he tenido ningún tipo de permiso. ¿Hay algo que me falta en mi manifiesto o quizás en mi configuración de eclipse?
Compatible con todas las versiones de SDK ( android.permission.ACCESS_FINE_LOCATION
convirtió en dangerous
permiso dangerous
en Android M y requiere que el usuario lo otorgue manualmente).
En las versiones de Android a continuación, Android M ContextCompat.checkSelfPermission(...)
siempre devuelve true
si agrega estos permisos en AndroidManifest.xml
)
public void onSomeButtonClick() {
...
if (!permissionsGranted()) {
ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.ACCESS_FINE_LOCATION}, 123);
} else doLocationAccessRelatedJob();
...
}
private Boolean permissionsGranted() {
return ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED);
}
@Override
public void onRequestPermissionsResult(final int requestCode, @NonNull final String[] permissions, @NonNull final int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 123) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission granted.
doLocationAccessRelatedJob();
} else {
// User refused to grant permission. You can add AlertDialog here
Toast.makeText(this, "You didn''t give permission to access device location", Toast.LENGTH_LONG).show();
startInstalledAppDetailsActivity();
}
}
}
private void startInstalledAppDetailsActivity() {
Intent i = new Intent();
i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.setData(Uri.parse("package:" + getPackageName()));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
}
en AndroidManifest.xml:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Estaba teniendo el mismo problema y no podía entender qué estaba haciendo mal. Resulta que la función de autocompletar para Android Studio estaba cambiando el texto a mayúsculas o minúsculas (dependiendo de si escribí en mayúsculas o en minúsculas antes de la autocompletar). El sistema operativo no estaba registrando el nombre debido a este problema y obtendría el error relacionado con un permiso faltante. Como se indicó anteriormente, asegúrese de que sus permisos estén etiquetados correctamente:
Correcto :
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Incorrecto
<uses-permission android:name="ANDROID.PERMISSION.ACCESS_FINE_LOCATION" />
Incorrecto
<uses-permission android:name="android.permission.access_fine_location" />
Aunque esto puede parecer trivial, es fácil pasarlo por alto.
Si hay alguna configuración para que los permisos no distingan entre mayúsculas y minúsculas, agregue un comentario con las instrucciones. ¡Gracias!
Has escrito mal el permiso
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />