Библиотека ALTBEACON - Фоновый режим? - PullRequest
0 голосов
/ 03 июля 2018

Мы пытаемся создать приложение, которое непрерывно измеряет Бикон и отправляет нам данные раз в секунду.

Проблема, которую мы обнаружили, заключается в том, что библиотека 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-секундного интервала на переднем плане, а также на заднем плане (когда экран выключается). Фон не работает ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...