IBeacon получает предупреждение. Неявные намерения небезопасны при обратном вызове MonitorNotifier.

Я использую Android 4.4 и получаю предупреждающее сообщение в обратном вызове мониторинга, когда найден маяк с указанным регионом.

код, который я использую для мониторинга,

@Override
public void onIBeaconServiceConnect() {

    iBeaconManager.setMonitorNotifier(new MonitorNotifier() {
        @Override
        public void didEnterRegion(Region region) {
          Log.e("didEnterRegion","I just saw an iBeacon for the first time!");       
        }

        @Override
        public void didExitRegion(Region region) {
            Log.e("didExitRegion","I no longer see an iBeacon");
        }

        @Override
        public void didDetermineStateForRegion(int state, Region region) {
            Log.e("didDetermineStateForRegion","I have just switched from seeing/not seeing iBeacons: "+state);   

            if(state == MonitorNotifier.INSIDE){
                try {
                    //Start Ranging in the Region.
                    iBeaconManager.startRangingBeaconsInRegion(region);
                } catch (RemoteException e) { 
                    System.out.println(e);
                }

            }
            else if(state == MonitorNotifier.OUTSIDE){
                try {
                    //Stop Ranging in the Region.
                    iBeaconManager.stopRangingBeaconsInRegion(region);
                } catch (RemoteException e) { 
                    System.out.println(e);
                }

            }
        }
        });

        try {
            //Start Monitoring in the Region.
            iBeaconManager.startMonitoringBeaconsInRegion(region);
        } catch (RemoteException e) { 
            System.out.println(e);
        }

и предупреждающее сообщение, которое я нашел в logcat,

04-19 14:32:08.156: D/BluetoothAdapter(10564): startLeScan(): null 
04-19 14:32:08.166: D/BluetoothAdapter(10564): onClientRegistered() - status=0 clientIf=5 
04-19 14:32:08.176: D/IBeaconService(10564): Scan started 
04-19 14:32:08.186: D/IBeaconManager(10564): Got a ranging callback 
04-19 14:32:08.186: D/IBeaconManager(10564): Got a ranging callback with 0 iBeacons 
04-19 14:32:08.186: D/IBeaconManager(10564): Calling ranging notifier on :com.example.ranging.BackgroundRanging$4@4226f1e8 
04-19 14:32:08.787: D/BluetoothAdapter(10564): onScanResult() - Device=4A:92:06:A9:FA:87 RSSI=-52 
04-19 14:32:08.787: D/IBeaconService(10564): got record 
04-19 14:32:08.797: D/IBeacon(10564): calculating accuracy based on rssi of -52.0 
04-19 14:32:08.797: D/IBeaconService(10564): iBeacon detected :128f4e13-01ef-4618-bffa-50fed67f24aa 1001 3003 accuracy: 0.47659904336004005 proximity: 1 
04-19 14:32:08.797: D/Callback(10564): attempting callback via intent: com.example.service.DID_MONITORING 
04-19 14:32:08.807: W/ContextImpl(10564): Implicit intents with startService are not safe: Intent { act=com.example.service.DID_MONITORING (has extras) } android.content.ContextWrapper.startService:494 com.radiusnetworks.ibeacon.service.Callback.call:85 com.radiusnetworks.ibeacon.service.IBeaconService.processIBeaconFromScan:438  
04-19 14:32:08.817: D/IBeaconService(10564): looking for ranging region matches for this ibeacon 
04-19 14:32:08.817: D/IBeaconService(10564): matches ranging region: proximityUuid: 128f4e13-01ef-4618-bffa-50fed67f24aa major: null minor:null 
04-19 14:32:09.257: D/IBeaconService(10564): Done with scan cycle 
04-19 14:32:09.257: D/IBeaconService(10564): Calling ranging callback with 1 iBeacons 
04-19 14:32:09.257: D/Callback(10564): attempting callback via messenger 
04-19 14:32:09.257: D/IBeaconService(10564): Restarting scan.  Unique beacons seen last cycle: 1 
04-19 14:32:09.257: D/BluetoothAdapter(10564): stopLeScan() 

person Dheeresh    schedule 18.04.2014    source источник
comment
Можете ли вы опубликовать свой код и точное предупреждающее сообщение?   -  person davidgyoung    schedule 18.04.2014
comment
@davidgyoung, пожалуйста, посмотрите правку.   -  person Dheeresh    schedule 19.04.2014


Ответы (1)


Это предупреждение появляется с устаревшими версиями Android iBeacon Library, 0.7 или более ранними версиями. В последней версии 0.7.6 этого предупреждения не будет. Простое решение — просто обновить библиотеку до последней версии, доступной здесь.

Предупреждение связано со способом передачи данных iBeacon между фоновой службой библиотеки и вашим приложением. Ранние версии библиотеки использовали «неявное намерение» для передачи этой информации, что теоретически могло привести к тому, что данные iBeacon отправлялись в неправильное приложение, если два приложения одновременно использовали библиотеку на телефоне. Для целей разработки это не имеет особого значения, но вы должны использовать последнюю версию библиотеки, если используете ее в рабочем приложении.

person davidgyoung    schedule 19.04.2014
comment
Дэвид с последней библиотекой Я столкнулся с новой проблемой. В обратном вызове уведомителя диапазона я вызываю метод своего приложения, и с этим обновлением я должен вызывать этот метод внутри потока пользовательского интерфейса, иначе он дает мне исключение, которое является [code]android.view.ViewRootImpl$CalledFromWrongThreadException: только исходный поток, который создал иерархия представлений может касаться своих представлений. [код] Я только обновил библиотеку, в старой версии библиотеки такой ошибки нет. - person Dheeresh; 21.04.2014
comment
Я новый пользователь stackoverflow и пытаюсь улучшить форматирование текста. - person Dheeresh; 21.04.2014
comment
Привет, @Dheeresh, пожалуйста, откройте новый вопрос для этого, так как это не связанная проблема. - person davidgyoung; 21.04.2014
comment
Привет URL: developer.radiusnetworks.com/ibeacon/android/download.html это не работа. - person Vrajesh; 04.05.2015
comment
@Vrajesh, обновленный URL-адрес загрузки: altbeacon.github.io/android-beacon -library/download.html - person davidgyoung; 04.05.2015