2017-06-28 33 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();