问题
I am using Android 4.4 and getting a warning message in the callback of Monitoring when a beacon with specified region is found.
code I am using for monitoring is
@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);
}
and the warning message I found in logcat is
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()
回答1:
This warning appears with outdated versions of the Android iBeacon Library, 0.7 or prior. The latest version is 0.7.6 and will not have this warning. The easy solution is to simply upgrade to the latest version of the library available here.
The warning has to do with the way that iBeacon data are passed between the library's background service and your app. Early versions of the library used an "implicit intent" to pass this information, which could theoretically cause iBeacon data to the wrong app if two apps were on the phone using the library simultaneously. For development purposes, it doesn't really matter, but you should use the latest library version if using it in a production app.
来源:https://stackoverflow.com/questions/23152547/ibeacon-getting-warning-implcit-intents-are-not-safe-on-callback-of-monitornotif