我已成功修改了参考实现应用程序的的Android的信标库使用以下信标布局,使得它检测到我手边的iBeacon显示设备:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout("m:0-3=4c000215,i:4-19,i:20-21,i:22-23,p:24-24"));
beaconManager.bind(this);
}
}
Run Code Online (Sandbox Code Playgroud)
作为BLE数据包内部的新手,我不确定这是否是正确的布局.该库赞同AltBeacon标准,其文档未提及如何检测iBeacon设备.
m:
前缀是否过于严格,或者是与iBeacon规范匹配的正确字节序列?参考:
我想知道Beacon Code代表什么.我的意思是,据我所知,它应该识别信标布局.这是否意味着我可以自定义任何类型的布局并为其分配任何类型的信标代码?我的意思是,我能写出类似的东西:
setBeaconLayout( "M:2-3 = ABCD,I:4-13,I:14-23,P:24-24,d:25-25")?
谢谢你的帮助
我正在尝试使用以下BeaconLayout检测Kontakt Beacon:
setBeaconLayout("m:8-9=0215,i:10-13,i:14-15,i:16-17,i:18-25"));
Run Code Online (Sandbox Code Playgroud)
但我似乎没有正确地做到这一点.广告包结构如下:
提前致谢.
我们有一个应用程序,包括第三方库(altbeacon),本地构建的Android库和应用程序组件.所有三个组件都有一个AndroidManifest.xml,它们在构建期间合并.该应用程序使用gradle构建.
该应用程序已在Google Play商店中发布.在最后一次迭代中,我们从API级别22升级到25.一切都没有错误构建,APK安装在真实设备上并且在没有错误的情况下进行测试,但是当我们在Google Play上更新应用程序时,APK的上传失败了错误:
上传失败
具有不同maxSdkVersions的权限android.permission.ACCESS_COARSE_LOCATION的重复声明.
分析我们发现的AndroidManaifest.xml org.altbeacon.beacon具有以下权限:
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="23" />
<uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION" />
Run Code Online (Sandbox Code Playgroud)
我们的本地Android库模块targetSdkVersion在build.gradle中设置为25,AndroidManifest.xml包含:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Run Code Online (Sandbox Code Playgroud)
在app模块中,build.dkVersion在build.gradle中设置为25.
应用程序模块中生成的AndroidManifest.xml包含:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION" />
Run Code Online (Sandbox Code Playgroud)
并且只是为了确认,查看APK本身并提取二进制清单:
~/.android-sdk/build-tools/25.0.3/aapt l -a app-release.apk | grep -B1 COARSE
E: uses-permission (line=62)
A: android:name(0x01010003)="android.permission.ACCESS_COARSE_LOCATION" (Raw: "android.permission.ACCESS_COARSE_LOCATION")
--
E: uses-permission-sdk-23 (line=76)
A: android:name(0x01010003)="android.permission.ACCESS_COARSE_LOCATION" (Raw: "android.permission.ACCESS_COARSE_LOCATION")
Run Code Online (Sandbox Code Playgroud)
所以有一个重复的标签,我认为清单合并应该已经识别出并从altbeacon库中删除了一个.我的问题是如何从altbeacon库中删除权限?
我已在appMan模块AndroidManifest.xml中尝试了以下内容:
<uses-permission-sdk-23
android:name="android.permission.ACCESS_COARSE_LOCATION"
tools:node="remove"
tools:selector="org.altbeacon.beacon"/>
Run Code Online (Sandbox Code Playgroud)
这导致:
AndroidManifest.xml:12:5-15:48 Warning:
uses-permission-sdk-23 was tagged at AndroidManifest.xml:12 to remove other declarations but no other declaration present
Run Code Online (Sandbox Code Playgroud)
和
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION"
tools:node="remove"
tools:selector="org.altbeacon.beacon"/>
Run Code Online (Sandbox Code Playgroud)
这导致: …
我在我的应用程序中使用Android Beacon Library,我逐字逐句地复制了他们的测距示例,但我不断收到您在代码下方看到的错误.任何帮助将不胜感激,我刚刚进入BTLE/beacons
package com.example.josh.beacons;
import android.os.Bundle;
import android.os.RemoteException;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import org.altbeacon.beacon.Beacon;
import org.altbeacon.beacon.BeaconConsumer;
import org.altbeacon.beacon.BeaconManager;
import org.altbeacon.beacon.BeaconParser;
import org.altbeacon.beacon.RangeNotifier;
import org.altbeacon.beacon.Region;
import java.util.Collection;
public class MainActivity extends AppCompatActivity implements BeaconConsumer {
protected static final String TAG = "RangingActivity";
private BeaconManager beaconManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));
beaconManager.bind(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
beaconManager.unbind(this);
}
@Override
public void onBeaconServiceConnect() {
beaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> …
Run Code Online (Sandbox Code Playgroud) 昨天我在Nexus 4上获得了Android 5.0的更新,并且altbeacon库停止了检测信标.似乎在监视和测距时,didEnterRegion和didRangeBeaconsInRegion都没有被调用.
即使Radius Networks的Locate应用程序现在表现不同,一旦检测到信标的值,它们就不再得到更新,而且通常看起来好像信标超出了范围.
我注意到的一点是,现在在logcat中出现以下行"BluetoothLeScanner:找不到回调包装器".我继续寻找那个类,看到它是用Android L引入的,但我不知道这是否与它有关.
重要的是,在更新之前,我一直在使用Locate应用程序和参考应用程序,没有任何麻烦.
我不知道这是否是一个普遍的问题,但如果它发生在我身上,我相信它可能发生在其他人身上,所以任何帮助都会真的很受欢迎.
提前致谢!
更新:
在让图书馆工作失败后,我决定尝试图书馆的Android L分支.我做的是我将新库插入参考应用程序,但也没有按预期工作.
通过在设备进入新区域时通知,Monitor Activity似乎正常工作.但是,测距活动不报告任何信标,虽然已经调用了ofRangeBeaconsInRegion,但总是报告零信标.奇怪的是,当活动暂停时(暂时切换到另一个应用程序),logcat显示现在使用实际信标调用了didRangeBeaconsInRegion.
我现在有点卡住,因为我不知道如何让任何图书馆在Android L上工作,所以再次,任何帮助都会非常感激.
bluetooth-lowenergy ibeacon-android altbeacon android-5.0-lollipop
我试图了解txPower究竟是什么以及如何使用它,因为我计划开发使用Beacons的Android应用程序.
我在网上看到了2个定义:
1.信标的发射功率.
2.接收功率距离信标1米.
这两个定义有何关联?此外,当使用诸如QuickBeacon之类的应用程序从设备发送信标信号时,如何确定将功率(txPower)设置为?
android bluetooth-lowenergy ibeacon ibeacon-android altbeacon
我希望Android Beacon Library的2.0版本能够正确检测旧式Estimote信标(不支持iBeacon技术的2013年之前的型号)和Gimbal信标.我知道万向节信标有加密的标识符,因此无法直接读取.但我至少想分享可以检测出一个存在的代码.
这是我有的:
用于检测万向节信标的代码(不读取加密标识符):
BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
BeaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout("m:0-3=ad7700c6"));
beaconManager.bind(this);
Run Code Online (Sandbox Code Playgroud)
用于检测2013年中期Estimote信标的代码(不读取标识符,因为我不知道如何):
BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
BeaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout(""m:0-3=2d24bf16""));
beaconManager.bind(this);
Run Code Online (Sandbox Code Playgroud)
是否有任何人(特别是来自Estimote或Gimbal的人)有关于上述字节偏移的任何附加信息,这将允许尽可能多地从传输中解码信息?在每种情况下,我认为我们需要关闭蓝牙服务UUID,它可能用比上面例子中更多的字节正确表示.我很想知道完整的服务UUID以及广告中发送的任何其他可读字段.
我在Android设备上使用AltBeacon示例应用程序 - altbeacon.org提供的示例应用程序位于:https://github.com/AltBeacon/android-beacon-library-reference
但是,启动时应用程序只检测并显示一个信标.我的Android设备附近有大约5个信标.我如何检测所有信标?
在RangingActivity.java中,我注意到当信标出现时正在调用此方法:
public void onBeaconServiceConnect() {
beaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
if (beacons.size() > 0) {
EditText editText = (EditText) RangingActivity.this.findViewById(R.id.rangingText);
Beacon firstBeacon = beacons.iterator().next();
logToDisplay("The first beacon " + firstBeacon.toString() + " is about " + firstBeacon.getDistance() + " meters away.");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我修改了迭代器以在while循环中读取集合,如下所示:
Beacon firstBeacon;
while(beacons.iterator().hasNext()){
firstBeacon = beacons.iterator().next();
logToDisplay("The first beacon " + firstBeacon.toString() + " is about " + firstBeacon.getDistance() + " meters …
Run Code Online (Sandbox Code Playgroud) 我正在与跨平台应用程序(Android和iOS)上的团队合作.
这个应用程序旨在使用beacons
和/或mesh networking
或的概念multipeer-connectivity
.目前,我们的团队正在使用Xamarin作为我们的IDE来创建单个代码库.
经过重大研究(显然不够重要),我只能找到以下资源..
http://altbeacon.github.io/android-beacon-library
https://github.com/octoblu/meshblu
https://github.com/octoblu/MeshbluKit-iOS
https://github.com/octoblu/MeshbluKit-Android
https://github.com/CharruaLab/AltBeacon
https://blog.xamarin.com/play-find-the-monkey-with-ios-7-ibeacons/
几个问题:
AltBeacon是否允许平台之间的通信?
是否有内置的方法在Xamarin/C#中建立Multipeer/Mesh网络?
Estimote是否需要使用贴纸/估计信标,或智能手机是否可以作为灯塔使用?
我在找什么:
当用户没有WiFi或"数据"连接时,在iOS和Android设备之间建立连接的方法.
基本上每个设备将充当彼此的"信标".
Xamarin/C#是必须的(虽然我会听到其他解决方案,如果他们有说服力)
这种情况:
两个人走过彼此.两者都在他们的手机上运行应用程序.一个人有一个iPhone,另一个人有一个机器人.他们的应用程序在后台运行(他们的手机放在口袋或手中并被锁定..意思不是"使用").当个人走过彼此时,他们的电话互相检测并发送/接收彼此的文本
在此活动发生之前,用户1使用该应用程序保存包含以下信息的备注......
"喷泉工作正常"
虽然用户2使用其设备上的应用程序,以节省笔记包含以下信息...
"扶手轻微损坏"
用户相互通过后,下次他们打开他们的应用程序时,他们应该会看到一个更新的笔记读取...
"喷泉工作正常
扶手轻微损坏"
可能的解决方案: TBD
被拒绝的解决方案:待定
-
目前的结论: 目前存在的应用程序,如FireChat,ViewRanger(我相信),或Xamarin示例"找到猴子".Apple在他们的商店使用iBeacons,其他人使用AltBeacon用于Android设备.我已经得出结论,这肯定是可能的,但我正在寻找如何最好地执行它,同时让两个平台充当彼此的信标.