Запрашивать разрешение на определение местоположения, когда НЕ выполняется мониторинг в фоновом режиме?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Запрашивать разрешение на определение местоположения, когда НЕ выполняется мониторинг в фоновом режиме?

Сообщение Anonymous »

Я использую библиотеку Android Beacon. Начиная с Marshmallow, я вижу следующую ошибку, как и ожидалось и задокументировано.


Отказ в разрешении: для получения результатов сканирования требуется разрешение ACCESS_COARSE_LOCATION или ACCESS_FINE_LOCATION< /p>


У меня есть код ранжирования во фрагменте, и при включении фрагмента выдается исключение RuntimeException. экран, как и ожидалось, поскольку я не спрашиваю разрешения. Если я нажму кнопку «Домой», вызывается «Пауза», и я отвязываю beaconManager, и исключение больше не выдается, как и ожидалось. Возвращаясь к «Активности» из предыдущего списка приложений, RuntimeException выдается снова при каждом сканировании.

Почему исключение выдается на переднем плане, хотя я добавил разрешение в AndroidManifest?

Согласно документации
ЗДЕСЬ, вам нужно запрашивать у пользователя разрешение на определение местоположения только в том случае, если вы выполняете сканирование в фоновом режиме?


вы получите следующую ошибку в LogCat при попытке выполнить сканирование Bluetooth в фоновом режиме, и маяки не будут обнаружены


Означает ли это ТОЛЬКО фоновое сканирование, или я неверно истолковываю документацию, и вы должны все равно подсказать? Я хочу избежать дополнительного (возможно, отталкивающего нервных пользователей) запроса разрешения внутри приложения, если этого можно избежать!

Мой манифест содержит -
Мой фрагмент кода из фрагмента —

Код: Выделить всё

public class NearMeNowFragment extends Fragment implements BeaconConsumer {

//Beacon manager stuff
private BeaconManager beaconManager;



@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
beaconManager = BeaconManager.getInstanceForApplication(getActivity());
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.near_me_now, container, false);

//Set up beacon stuff if Bluetooth available
if (verifyBluetooth(false)) {
beaconManager.bind(this);
}



return rootView;
}

/***************************
Beacon config methods
****************************
*/

@Override
public void onBeaconServiceConnect() {
//update all scan periods
beaconManager.setForegroundScanPeriod(1100l);
beaconManager.setForegroundBetweenScanPeriod(8900l);
beaconManager.setAndroidLScanningDisabled(true);
try {
beaconManager.updateScanPeriods();
} catch (RemoteException e) {
e.printStackTrace();
}

beaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection beacons, Region region) {
if (beacons.size() > 0) {

//handling beacons here
...
} else {
Log.i(TAG, "ZERO BEACONS IN SCAN");
}
}
});

try {
beaconManager.startRangingBeaconsInRegion(new Region(TAG, null, null, null));
} catch (RemoteException e) {
e.printStackTrace();
}
}

@Override
public Context getApplicationContext() {
return getActivity().getApplicationContext();
}

@Override
public void unbindService(ServiceConnection serviceConnection) {
getActivity().unbindService(serviceConnection);
}

@Override
public boolean bindService(Intent intent, ServiceConnection serviceConnection, int mode) {
return getActivity().bindService(intent, serviceConnection, mode);
}

@Override
public void onPause() {
super.onPause();

if(beaconManager.isBound(this)){
beaconManager.unbind(this);
}
}

@Override
public void onResume() {
super.onResume();

beaconManager.bind(this);
}

@Override
public void onDestroy() {
super.onDestroy();
if(beaconManager.isBound(this)){
beaconManager.unbind(this);
}
}


Моя фактическая ошибка Logcat:


W/Binder﹕ Обнаружено исключение RuntimeException из реализации заглушки подшивщика.
java.lang.SecurityException: для получения результатов сканирования требуется разрешение ACCESS_COARSE_LOCATION или ACCESS_FINE_LOCATION


Подробнее здесь: https://stackoverflow.com/questions/331 ... background
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»