En API >= 23, estamos obligados a pedir permiso a los usuarios en tiempo de ejecución. Pero por alguna razón, los permisos hacen que onResume se llame infinitamente. ¿Qué causa esto?
@Override protected void onResume() { super.onResume(); ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ANYPERMISSION},1); } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { }Cuando muestra el cuadro de diálogo de la pregunta de permiso, Acitvity va a onPause , y cuando el cuadro de diálogo se oculta, va a onResume . Tienes que cambiar el lugar de pedir permiso.
Un pequeño fragmento de código para obtener permisos para completar la respuesta anterior :)
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (Build.VERSION.SDK_INT >= 23) ensurePermissions( Manifest.permission.GET_ACCOUNTS, Manifest.permission.WRITE_EXTERNAL_STORAGE ); }y:
@TargetApi(23) private void ensurePermissions(String... permissions) { boolean request = false; for (String permission : permissions) if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) { request = true; break; } if (request) { requestPermissions(permissions, REQUEST_CODE_PERMISSION); } }primero, su aplicación debe verificar si se le ha otorgado un permiso en particular antes de solicitar el permiso de tiempo de ejecución.
if (ContextCompat.checkSelfPermission(this.getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { } else { ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_CODE); }