Мы пытаемся создать приложение, которое непрерывно измеряет Бикон и отправляет нам данные раз в секунду.
Проблема, которую мы обнаружили, заключается в том, что библиотека ALTBEACON работает нормально и точно, когда дисплей включен.
Как только мы отключаем дисплей, приложение прекращает отправку данных в заданный интервал. На самом деле Android Studio logcat показывает нам, что он даже не распознает маяки, поэтому он не отправляет данные.
У нас нет этой проблемы с другими библиотеками маяков, поэтому мы предполагаем, что это программная проблема.
Кто-нибудь знает, почему это происходит и как предотвратить прекращение работы приложения с выключенным дисплеем?
Фрагмент манифеста
<?xml version="1.0" encoding="UTF-8"?>
-<manifest android:installLocation="internalOnly" package="package_name" xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
// other permissions
-<application android:theme="@style/AppTheme" android:supportsRtl="true" android:label="@string/app_name" android:icon="@mipmap/app_icon" android:allowBackup="false">
<activity android:name=".MyView" android:theme="@style/Theme.MyFancyThemeWhiteNoActionBar" android:screenOrientation="portrait"/>
// other activity and services
-<service android:name="org.altbeacon.beacon.service.BeaconService" tools:node="replace">
<meta-data android:name="longScanForcingEnabled" android:value="true"/>
</service>
</application>
</manifest>
Фрагмент JAVA
public class MyView extends AppCompatActivity implements BeaconConsumer {
Region region;
@Override
public void onBeaconServiceConnect() {
beaconManager.addRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
for (Beacon oneBeacon : beacons) {
// doing my task.
}
}
});
try {
beaconManager.startRangingBeaconsInRegion(region);
} catch (RemoteException e) {
e.printStackTrace();
}
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.landing_view);
.
.
.
.
Identifier id1 = Identifier.parse(UUID);
Identifier id2 = Identifier.parse(MAJOR);
region = new Region("id", id1, id2, null);
beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.setBackgroundBetweenScanPeriod(0l);
beaconManager.setForegroundBetweenScanPeriod(0l);
beaconManager.setBackgroundScanPeriod(1000L);
beaconManager.setForegroundScanPeriod(1000L);
//new BackgroundPowerSaver(this);
beaconManager.setBackgroundMode(true);
BluetoothMedic medic = BluetoothMedic.getInstance();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
medic.enablePowerCycleOnFailures(this);
medic.enablePeriodicTests(this, BluetoothMedic.SCAN_TEST | BluetoothMedic.TRANSMIT_TEST);
}
beaconManager.getBeaconParsers().clear();
beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));
beaconManager.bind(this);
}
@Override
public void onDestroy() {
super.onDestroy();
if (beaconManager != null) {
try {
beaconManager.stopRangingBeaconsInRegion(region);
beaconManager.unbind(this);
} catch (NullPointerException | RemoteException e) {
e.printStackTrace();
}
}
}
}
ПРИМЕЧАНИЕ Я не создаю никакого класса приложения для фонового обнаружения маяка. На переднем плане эта задача идет гладко, она мне нужна и для фона. Поэтому, если мне нужно что-то изменить, пожалуйста, прокомментируйте.
Я хочу сканировать маяки для каждого 1-секундного интервала на переднем плане, а также на заднем плане (когда экран выключается). Фон не работает ...