Как изменить значение параметров iBeacon (UUID, Major, Minor, TxPower) с помощью SDK на Android

В настоящее время я разрабатываю приложение для Android в Android Studio для обнаружения и использования iBeacons. Часть, где я должен обнаружить маяк и получить его параметры, выполнена, но я сталкиваюсь с проблемами, чтобы изменить значение этих параметров для конкретного iBeacon с помощью API, доступных в системе Android. Я видел, что различные функции, такие как setId1 (UUID), setId2 (Major), setId3 (Minor) в классе Beacon.Builder(), могут использоваться для изменения значений, но я немного потерял, чтобы знать, как использовать это работает на конкретном маяке.

Это определение моего класса, который я создал для маяка:

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;
}

person P. Laine    schedule 21.04.2017    source источник


Ответы (1)


Класс Beacon.Builder() в библиотеке Android Beacon используется для создания новых объектов маяка с целью передачи объявления маяка с самого устройства Android.

В библиотеке нет поддержки изменения конфигураций внешних аппаратных маяков, например, изменение минора. Это верно, потому что для этого не существует стандартного механизма. У каждого производителя аппаратного обеспечения маяка есть своя система изменения конфигурации, многие из которых являются собственностью и недокументированы.

Итог: чтобы программно изменить конфигурацию аппаратного маяка, вам понадобится специальный SDK от вашего поставщика маяка.

person davidgyoung    schedule 21.04.2017
comment
я пытаюсь изменить uuid оценочного маяка без использования их SDK. разве это невозможно? есть идеи, почему? - person zealvault; 29.05.2018
comment
У Estimote есть собственный протокол для настройки маяков. По этой причине вы должны использовать их SDK для их настройки или самостоятельно перепроектировать и написать свой собственный код. - person davidgyoung; 29.05.2018