2017-06-28 35 views
0

我正在尝试创建一个android应用程序,该应用程序的范围为用户给出的区域中的信标。 问题是,当我添加距离约束并回到mainactivity时,该应用程序还显示前一个测距实例。Android - 无法停止测距信标

对于实施例

的距离的默认值为10m当我改变至5μm的距离,它仍然显示的信标为10m开。如果我将距离值更改为2米,我将显示5米范围的实例和10米范围的实例。

MAINACTIVITY

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 

    if(id == R.id.settings) { 
     try { 
      beaconManager.stopRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null)); 
      beaconManager.unbind(this); 
      Log.w(TAG,"Stopped ranging"); 
     } catch (RemoteException e) { 
      e.printStackTrace(); 
     } 
     startActivity(new Intent(MainActivity.this, Settings.class)); 

    } 

    return true; 
} 

可变距离在OnCreate中

SharedPreferences sharedPref = getApplication().getSharedPreferences("Settings",Context.MODE_PRIVATE); 
distance = sharedPref.getFloat("distance",10.0f); 

测距功能

@Override 
public void onBeaconServiceConnect() { 

    //beacon ranging 


    beaconManager.addRangeNotifier(new RangeNotifier() { 

     @Override 
     public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) { 

      if (beacons.size() > 0) { 
       for (Beacon beacon : beacons) { 
        if(beacon.getDistance()<= distance) { 
         Log.i(TAG,beacon.getBluetoothName()); 
         Log.i(TAG,String.valueOf(distance));      
        } 

       } 
      } 

     } 

    }); 


    try { 
     beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null)); 
    } catch (RemoteException e) { } 
} 

设置

Button button; 
EditText distance; 
Float distanceValue; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_settings); 
    setTitle("Settings"); 
    SharedPreferences sharedPref = getApplication().getSharedPreferences("Settings",Context.MODE_PRIVATE); 
    final SharedPreferences.Editor editor = sharedPref.edit(); 
    button = (Button) findViewById(R.id.button); 
    distance = (EditText) findViewById(R.id.distanceValue); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      if(distance.getText().toString().isEmpty()){ 
       distance.requestFocus(); 
       distance.setError("Required"); 
      } 
      else{ 
       distanceValue = Float.valueOf(distance.getText().toString()); 
       editor.putFloat("distance",distanceValue); 
       editor.commit(); 
       startActivity(new Intent(Settings.this,MainActivity.class)); 

      } 
     } 
    }); 

LOG

之前

06-28 14:54:21.724 13866-18103/com.example.beaconscanner I/MonitoringActivity: proxiteeMini_00037 
06-28 14:54:21.724 13866-18103/com.example.beaconscanner I/MonitoringActivity: 10.0 
06-28 14:54:21.732 13866-18103/com.example.beaconscanner I/MonitoringActivity: proxiteeMini_00035 
06-28 14:54:21.732 13866-18103/com.example.beaconscanner I/MonitoringActivity: 10.0 

06-28 14:56:37.778 13866-18103/com.example.beaconscanner I/MonitoringActivity: proxiteeMini_00035 
06-28 14:56:37.778 13866-18103/com.example.beaconscanner I/MonitoringActivity: 5.0 
06-28 14:56:37.788 13866-18103/com.example.beaconscanner I/MonitoringActivity: proxiteeMini_00035 
06-28 14:56:37.788 13866-18103/com.example.beaconscanner I/MonitoringActivity: 5.0 
06-28 14:56:37.801 13866-18103/com.example.beaconscanner I/MonitoringActivity: proxiteeMini_00037 
06-28 14:56:37.801 13866-18103/com.example.beaconscanner I/MonitoringActivity: 10.0 

proxiteeMini_00037为10m范围内

proxiteeMini_00035为5m范围

+0

你能告诉你如何设置变量'distance'的值吗? – davidgyoung

+0

相应地编辑了这个问题。 – Burhan

回答

0

我怀疑你有在同一时间运行MainActivity的多个实例中。 MainActivity的旧实例具有旧距离值,而新实例具有新值。创建一个从SettingsActivity返回MainActivity的意图会导致这种情况。你可以通过退出SettingsActivity来解决这个问题this.finish();