2017-04-21 180 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。

相关问题