Android 有时,当用户在范围内时,会调用enter和exit方法
我是android开发新手。我正在使用Altbeacon库检测信标,我有kontakt.io信标。我试图创建一个应用程序,当用户进入区域时通知用户,但当用户第一次完美地进入dideEnterRegion()方法时,但经过一段时间后,即使用户在同一区域,也会调用didExitRegion()区域。当用户丢失区域并再次出现时,我面临一些问题。再次检测用户需要花费太多时间Android 有时,当用户在范围内时,会调用enter和exit方法,android,altbeacon,Android,Altbeacon,我是android开发新手。我正在使用Altbeacon库检测信标,我有kontakt.io信标。我试图创建一个应用程序,当用户进入区域时通知用户,但当用户第一次完美地进入dideEnterRegion()方法时,但经过一段时间后,即使用户在同一区域,也会调用didExitRegion()区域。当用户丢失区域并再次出现时,我面临一些问题。再次检测用户需要花费太多时间 public class MainActivity extends AppCompatActivity implements B
public class MainActivity extends AppCompatActivity implements BeaconConsumer {
protected static final String TAG = "MonitoringActivity";
private BeaconManager beaconManager;
Region region;
String Eddystone_Namespace_ID="f7826da6bc5b71e0893e";
Button next;
Handler ha=new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
beaconManager = BeaconManager.getInstanceForApplication(this);
next=findViewById(R.id.next);
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,TestingBeacon.class);
startActivity(intent);
}
});
beaconManager.setEnableScheduledScanJobs(false);
beaconManager.setForegroundScanPeriod(2000);
beaconManager.setForegroundBetweenScanPeriod(0);
beaconManager.setBackgroundScanPeriod(200);
beaconManager.setBackgroundBetweenScanPeriod(0);
beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout(BeaconParser.EDDYSTONE_UID_LAYOUT));
beaconManager.bind(this);
}
@Override
protected void onResume() {
super.onResume();
region=new Region("myRangingUniqueId", Identifier.parse(Eddystone_Namespace_ID), null, null);
try {
beaconManager.startMonitoringBeaconsInRegion(region);
beaconManager.startRangingBeaconsInRegion(region);
} catch (RemoteException e) {
}
}
@Override
public void onBeaconServiceConnect() {
beaconManager.addMonitorNotifier(new MonitorNotifier() {
@Override
public void didEnterRegion(Region region) {
Log.e(TAG, "I just saw an beacon for the first time!");
Toast.makeText(MainActivity.this,"Near By To Beacon",Toast.LENGTH_SHORT).show();
}
@Override
public void didExitRegion(Region region) {
Log.e(TAG, "I no longer see an beacon");
Toast.makeText(MainActivity.this,"Beacon Range Lost",Toast.LENGTH_SHORT).show();
try {
beaconManager.stopRangingBeaconsInRegion(region);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void didDetermineStateForRegion(int state, Region region) {
Log.e(TAG, "I have just switched from seeing/not seeing beacons: "+state);
}
});
beaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
for (Beacon beacon : beacons) {
Log.e("MainActivity", "I see a beacon that is about "+beacon.getDistance()+" meters away.");
}
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
beaconManager.unbind(this);
}
public类MainActivity扩展AppCompatActivity实现BeaconConsumer{
受保护的静态最终字符串标记=“MonitoringActivity”;
私人BeaconManager BeaconManager;
区域;
字符串Eddystone_Namespace_ID=“f7826da6bc5b71e0893e”;
按钮下一步;
Handler ha=新的Handler();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
beaconManager=beaconManager.getInstanceForApplication(此应用程序);
next=findViewById(R.id.next);
next.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意向意向=新意向(MainActivity.this,TestingBeacon.class);
星触觉(意向);
}
});
beaconManager.setEnableScheduledScanJobs(false);
beaconManager.setForegroundScanPeriod(2000年);
beaconManager.SetForeGroundBeweenScanPeriod(0);
beaconManager.setbackgroundscanneperiod(200);
beaconManager.Setbackground在扫描周期之间(0);
beaconManager.getBeaconParsers().add(新建BeaconParser().setBeaconLayout(BeaconParser.EDDYSTONE\u UID\u布局));
beaconManager.bind(这个);
}
@凌驾
受保护的void onResume(){
super.onResume();
region=新区域(“MyRangUniqueId”,Identifier.parse(Eddystone\u Namespace\u ID),null,null);
试一试{
beaconManager.startMonitoringBeaconsInRegion(区域);
StarTrangBeaconRegion(地区)信标管理人;
}捕获(远程异常){
}
}
@凌驾
beacerviceconnect()上的公共无效{
beaconManager.addMonitorNotifier(新的MonitorNotifier(){
@凌驾
公共区域(区域){
Log.e(标记“我第一次看到灯塔!”);
Toast.makeText(MainActivity.this,“靠近灯塔”,Toast.LENGTH_SHORT.show();
}
@凌驾
公共区域(区域){
Log.e(标记“我不再看到灯塔”);
Toast.makeText(MainActivity.this,“信标范围丢失”,Toast.LENGTH_SHORT.show();
试一试{
站长站长站长站长站长站长站长站长站长站长站长站长站长站长站长站长站长站长站长站长站长站长站长站长站长站长站长站长站长站长站长站长站长;
}捕获(远程异常){
e、 printStackTrace();
}
}
@凌驾
公共无效不确定地区(国际州、地区){
Log.e(标记“我刚从看到/没有看到信标切换到:“+state”);
}
});
setRangeNotifier(新的RangeNotifier(){
@凌驾
公共无效范围信标区域(收集信标,区域){
用于(信标:信标){
Log.e(“MainActivity”,“我看到一个信标大约在“+beacon.getDistance()+”米之外”);
}
}
});
}
@凌驾
受保护的空onDestroy(){
super.ondestory();
beaconManager.unbind(此);
}
我希望用户在进入该地区时通知他们,并在退出该地区时通知他们。有人对此帖子发表评论,任何人都可以告诉我。为什么会发生这种情况