Ваше приложение не запрашивает разрешение во время выполнения, потому что вы не добавили код в.Кроме того, на последних версиях Android было добавлено разрешение во время выполнения (я полагаю, оно было запущено на Android M).
Итак, в предыдущих версиях Android ваше приложение будет работать нормально, поскольку вам просто нужно добавить разрешение в манифест.
В новых версиях необходимо дополнительно запросить разрешение во время выполнения. Отсутствие разрешения не всегда приводит к сбою. Они могут генерировать только предупреждение в журналах и т. Д.
В любом случае, чтобы избавиться от этого предупреждения, вы должны запросить разрешение во время выполнения.Ниже вы можете найти небольшой пример:
public class MainActivity extends AppCompatActivity implements LocationListener {
private final static int LOCATION_PERMISSION_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
....
try {
LocMgr = (LocationManager) getSystemService(LOCATION_SERVICE);
if (ActivityCompat.checkSelfPermission(this, permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this, permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// Missing both permissions. User didn't accept them yet. Request
ActivityCompat.requestPermissions(this, new String[] {permission.ACCESS_FINE_LOCATION, permission.ACCESS_COARSE_LOCATION}, LOCATION_PERMISSION_CODE);
} else {
// Have permissions. Don't need to request. Just request location
LocMgr.requestLocationUpdates( K.GPS_PROVIDER, 0, 0, this );
}
} catch(Exception e) {
UI.warningBox( this, "GPS appears to be either absent or disabled" );
}
....
}
@Override
public void onRequestPermissionsResult(final int requestCode,
@NonNull final String[] permissions,
@NonNull final int[] grantResults) {
if(requestCode == LOCATION_PERMISSION_CODE) {
if(grantResults.length > 1
&& grantResults[0] == PackageManager.PERMISSION_GRANTED /* ACCESS_FINE_LOCATION */
&& grantResults[1] == PackageManager.PERMISSION_GRANTED /* ACCESS_COARSE_LOCATION */) {
// User accepted both permissions. request location updates
LocMgr.requestLocationUpdates( K.GPS_PROVIDER, 0, 0, this );
}
}
}
}