El proveedor de ubicación de gps de Android 6.0 requiere el permiso ACCESS_FINE_LOCATION

Tengo todas las premisas definidas en mi manifiesto para el uso de gps. Me gusta

"Uses-permission android: name =" android.permission.ACCESS_FINE_LOCATION "/>

"Uses-permission android: name =" android.permission.ACCESS_COARSE_LOCATION "/>

Cada vez que intento abrir esta actividad en Android 6.0, se detiene con este mensaje de logcat. Pero funciona en algunos teléfonos. ¿Puede alguien ayudarme a averiguar, y proporcionar una solución. He estado atrapado en días tratando de resolver esto, y cómo solucionarlo.

Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{org.data.smurf/org.data.smurf.Konkurranse}: java.lang.SecurityException: "gps" location provider requires ACCESS_FINE_LOCATION permission. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3253) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349) at android.app.ActivityThread.access$1100(ActivityThread.java:221) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7224) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) Caused by java.lang.SecurityException: "gps" location provider requires ACCESS_FINE_LOCATION permission. at android.os.Parcel.readException(Parcel.java:1620) at android.os.Parcel.readException(Parcel.java:1573) at android.location.ILocationManager$Stub$Proxy.requestLocationUpdates(ILocationManager.java:688) at android.location.LocationManager.requestLocationUpdates(LocationManager.java:908) at android.location.LocationManager.requestLocationUpdates(LocationManager.java:469) at org.data.smurf.Konkurranse.onCreate(Konkurranse.java:197) at android.app.Activity.performCreate(Activity.java:6876) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349) at android.app.ActivityThread.access$1100(ActivityThread.java:221) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7224) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

Aquí está mi actividad de Konkurranse / Competición. He quitado el código no relacionado como el menú, y la barra de acción.

 Public class Konkurranse Extends Activity { /** * Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FacebookSdk.sdkInitialize(getApplicationContext()); Fresco.initialize(getApplicationContext()); setContentView(R.layout.activity_konkurranse); LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); final com.facebook.Profile profile = com.facebook.Profile.getCurrentProfile(); final ProfilePictureView profilePictureView = (ProfilePictureView) findViewById(R.id.profilepic); final TextView name = (TextView) findViewById(R.id.name); simpleDraweeView = (SimpleDraweeView) findViewById(R.id.profilePicture); RoundingParams roundingParams = RoundingParams.fromCornersRadius(50f); roundingParams.setRoundAsCircle(true); simpleDraweeView.getHierarchy().setRoundingParams(roundingParams); /// Logged IN \\\ if (profile != null) { profilePictureView.getProfileId(); profilePictureView.setProfileId(profile.getId()); name.setText(profile.getName()); simpleDraweeView.setImageURI(profile.getProfilePictureUri(100, 100)); } final SharedPreferences sharedPrefs = getSharedPreferences("details", MODE_PRIVATE); //After referencing your Views, add this. final String nameStr = sharedPrefs.getString("name", null); final String idStr = sharedPrefs.getString("id", null); AccessToken token = AccessToken.getCurrentAccessToken(); if (token != null) { if (nameStr != null) name.setText(nameStr); if (idStr != null) profilePictureView.setProfileId(idStr); simpleDraweeView.setImageURI(profile.getProfilePictureUri(100, 100)); } //.. Do the same for other profile data mobilnummer = (EditText) findViewById(R.id.mobilnummer); buttongps = (Button) findViewById(R.id.gps); buttongps.setOnClickListener(onButtongpsClick); buttonblue = (Button) findViewById(R.id.bluetooth); buttonblue.setOnClickListener(onButtonblueClick); final LocationManager manager; manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); final ImageView gpsImg = (ImageView) findViewById(R.id.gpsstatus); if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { gpsImg.setImageResource(R.drawable.ok); } else { gpsImg.setImageResource(R.drawable.notok); //not ok } // Register bluettoth listener bluetoothListener = new BluetoothListener() { @Override public void onBluetoothOff() { btImg.setImageResource(R.drawable.notok); //not ok } @Override public void onBluetoothOn() { btImg.setImageResource(R.drawable.ok); } }; IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED); registerReceiver(bluetoothListener, filter); gpsListener = new GPSListener(this) { @Override public void onGPSOff() { gpsImg.setImageResource(R.drawable.notok); //not ok } @Override public void onGPSOn() { gpsImg.setImageResource(R.drawable.ok); } }; // Henter fra SharedPrefs SharedPreferences prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); String savedMobileNumber = prefs.getString("mobilnummer", ""); mobilnummer.setText(savedMobileNumber); final ImageView tlfstatus = (ImageView) findViewById(R.id.tlfstatus); if (mobilnummer.getText().toString().length() >= 8) { tlfstatus.setImageResource(R.drawable.ok); } else { tlfstatus.setImageResource(R.drawable.notok); //not ok } // OnCreate ends here. } public View.OnClickListener onButtongpsClick = new View.OnClickListener() { @Override public void onClick(View v) { Intent gpsOptionsIntent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity(gpsOptionsIntent); } }; public View.OnClickListener onButtonblueClick = new View.OnClickListener() { @Override public void onClick(View v) { BluetoothAdapter mBluetoothAdapter; mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (!mBluetoothAdapter.isEnabled()) mBluetoothAdapter.enable(); ImageView img = (ImageView) findViewById(R.id.bluestatus); img.setImageResource(R.drawable.ok); } }; } 

La respuesta de Serg es cierta. Con Marshmallow (Android 6.0, API Level 23) el sistema permissiom ha cambiado y ahora necesita cuidar los dispositivos Marshmallow solicitando permisos en tiempo de ejecución. Hay algunas bibliotecas para facilitar el proceso.

Los permisos fáciles son uno de ellos.

Consulte https://developer.android.com/training/permissions/requesting.html para obtener una nueva directiva de permisos y cómo solicitar permisos en tiempo de ejecución.

  • Android 6: la aplicación utiliza más memoria cada vez que se inicia
  • La actividad no llamó a terminar? (API 23)
  • Servicio de primer plano muerto en Huawei (GRA-UL00) - Aplicaciones protegidas habilitadas
  • ¿Puedo anular el icono predeterminado de notificación push en android desde el icono de la aplicación hasta el icono personalizado?
  • ¿Cómo implemento correctamente Immersive Full-Screen Mode en Android?
  • Android 6.0.1 forzar la conexión wifi sin acceso a Internet
  • Android FAB más signo no presente en android dibujable
  • Android Marshmallow - cambio de estado de permisos
  • Permiso de MarshMallow para gmaps
  • Android Marshmallow ScanSetting
  • Solicitar permisos de ubicación de un servicio Android M
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.