2017-04-21 167 views
2

我目前正在Android Studio上開發一個Android應用程序來檢測和使用iBeacons。我必須檢測信標並獲取其參數的部分已完成,但我面臨的問題是使用Android系統上可用的API更改特定iBeacon的此參數的值。我已經看到Beacon.Builder()類中的setId1(UUID),setId2(Major),setId3(Minor)等不同的函數可用於修改這些值,但我知道如何使用這在特定的信標上起作用。如何通過Android上的SDK更改iBeacon參數(UUID,Major,Minor,TxPower)的值

這是我的燈塔創建我的類定義:

class IdBeacon { 
    private String UUID; 
    private String Major; 
    private String Minor; 
    private String Distance; 
    private String RSSI; 
    private String TxPower; 

    public IdBeacon (String UUID, String Major, String Minor, String Distance, String RSSI, String TxPower){ 
     this.UUID = UUID; 
     this.Major = Major; 
     this.Minor = Minor; 
     this.Distance = Distance; 
     this.RSSI = RSSI; 
     this.TxPower = TxPower; 
    } 

    public String getUUID() { return UUID; } 
    public void setUUID(String UUID) { this.UUID = UUID; } 

    public String getMajor() { return Major; } 
    public void setMajor(String major) { Major = major; } 

    public String getMinor() { return Minor; } 
    public void setMinor(String minor) { Minor = minor; } 

    public String getDistance() { return Distance; } 
    public void setDistance(String distance) { Distance = distance } 

    public String getRSSI() { return RSSI; } 
    public void setRSSI(String RSSI) { this.RSSI = RSSI; } 

    public String getTxPower() { return TxPower; } 
    public void setTxPower(String txPower) { this.TxPower = txPower; } 
} 

這是代碼來獲取iBeacon顯示的參數的不同值:

String distance = String.valueOf(beacons.iterator().next().getDistance()); 
String Uuid = String.valueOf(beacons.iterator().next().getId1()); 
String major = String.valueOf(beacons.iterator().next().getId2()); 
String minor = String.valueOf(beacons.iterator().next().getId3()); 
String Rssi = String.valueOf(beacons.iterator().next().getRssi()); 
String TxPower = String.valueOf(beacons.iterator().next().getTxPower()); 

arrayIdBeacon.clear(); 
arrayIdBeacon.add(new IdBeacon(Uuid,major,minor,distance,Rssi,TxPower)); 

這是我的ArrayAdapter的聲明來處理顯示我的iBeacon參數的視圖:

public BeaconAdapter(Context context, ArrayList<IdBeacon> idBeacons){ 
    super(context, 0,idBeacons); 
} 

@NonNull 
@Override 
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 

    IdBeacon beacon = getItem(position); 

    if (convertView == null){ 
     convertView = LayoutInflater.from(getContext()).inflate(R.layout.mylist, parent, false); 
    } 

    TextView tvUuid = (TextView) convertView.findViewById(R.id.ValUUID); 
    TextView tvMajor = (TextView) convertView.findViewById(R.id.ValMajor); 
    TextView tvMinor = (TextView) convertView.findViewById(R.id.ValMinor); 
    TextView tvDist = (TextView) convertView.findViewById(R.id.ValDist); 
    TextView tvRSSI = (TextView) convertView.findViewById(R.id.ValRSSI); 
    TextView tvTxPower = (TextView) convertView.findViewById(R.id.tvTxPower); 

    if (beacon != null){ 
     tvUuid.setText(beacon.getUUID()); 
     tvMajor.setText(beacon.getMajor()); 
     tvMinor.setText(beacon.getMinor()); 
     tvDist.setText(beacon.getDistance()); 
     tvRSSI.setText(beacon.getRSSI()); 
     tvTxPower.setText(beacon.getTxPower()); 
    } 

    return convertView; 
} 

回答

0

Android Beacon庫中的Beacon.Builder()類用於構建新的信標對象,以便從Android設備本身傳輸信標廣告。

庫中不支持更改外部硬件信標配置,例如更改未成年人。這是事實,因爲沒有這樣做的標準機制。每個信標硬件製造商都有自己的系統來改變配置,其中許多是專有的和無證的。底線:以編程方式更改硬件信標配置,您將需要來自信標供應商的特定SDK。

相關問題