有时,BluetoothDevice.getName()返回null.我该如何解决?remoteDeviceName在以下代码中可能为null.我需要通过remoteDeviceName来区分我的设备和其他设备.
BluetoothAdapter.getDefaultAdapter().startLeScan(new LeScanCallback() {
@Override
public void onLeScan(final BluetoothDevice device, final int rssi,
byte[] scanRecord) {
String remoteDeviceName = device.getName();
Log.d("Scanning", "scan device " + remoteDeviceName);
});
Run Code Online (Sandbox Code Playgroud) 我想在我的Android应用程序中被动地扫描BLE广告客户.
但我找不到如何做到这一点.
根据蓝牙4.0核心规范,存在被动扫描模式.
第6卷:核心系统包[低能量控制器音量],
D部分:4.1被动扫描
https://www.bluetooth.org/DocMan/handlers/DownloadDoc.ashx?doc_id=282159
"设备可以使用被动扫描查找广告该地区的设备."
而且,android有确定扫描类型的参数.(主动/被动)
http://androidxref.com/4.3_r2.1/xref/external/bluetooth/bluedroid/stack/btm/btm_ble_gap.c#555
"scan_type:主动扫描或被动扫描"
同时,iOS可以被动地扫描广告客户.(遗憾的是,仅限后台模式)
http://lists.apple.com/archives/bluetooth-dev/2012/May/msg00041.html
"当应用程序处于后台时,iOS会执行被动扫描."
但我无法找到是否可以使用被动扫描模式.
问题:是否可以在Android上使用"PASSIVE SCAN"?如果可能,如何使用此功能?
需要编写一个客户端,它可以扫描可用的WIFI网络,并使用Java连接到最知名的网络.这可能是执行此任务的桌面客户端.任何指针都会有所帮助,感谢您的回复.
我正在写一个BLE应用程序,需要跟踪外围设备是广告还是停止.
我跟着获得了没有重复的外围设备和startLeScan()的 BLE 过滤行为,我在这里完全同意.
为了使其可行,我保留了定时器,在一定时间(3秒)后重新扫描外围设备.但随着市场上新设备的推出(5.0更新),一些时间重新扫描需要一些时间来寻找外围设备.
任何建议或是否有人实现了这一点?
我在理解当iOS应用程序处于bacground时如何执行扫描时遇到一些麻烦.我有一个非常简单的测试应用程序,它只扫描设备并将结果输出到控制台.我已经在Info.plist中添加了bluetooth-central到所需的后台模式,所以我应该没问题,我正在使用一个指定的服务扫描设备,即
NSArray *cbuuidArray = [NSArray arrayWithObjects:[CBUUID UUIDWithString:@"UUIDFromUUIDGEN"],nil];
[self.centralManager scanForPeripheralsWithServices:cbuuidArray options:@{ CBCentralManagerScanOptionAllowDuplicatesKey : @YES }];
Run Code Online (Sandbox Code Playgroud)
当应用程序处于前台时,我只有一个(或没有)BLE设备连接到电源,因此iOS检测到它并经常显示结果.当我转到后台时,没有更多的第一个设备的结果,因为CBCentralManagerScanOptionAllowDuplicatesKey设置为NO.
在这一点上,我正在为第二个BLE设备供电,并急切地等待它显示在结果中.等了10分钟后什么也没出现.自我上次发出通知以来,应用程序未终止,applicationDidEnterBackground并且applicationWillTerminate在我处理任务时从未调用过.
以一种非常偶然的方式,我发现如果我的应用程序正在运行并且仍然在后台扫描而另一个BLE扫描应用程序(我正在使用优秀的BLExplr)位于前台并开始扫描,那么我的应用程序最终会在同时作为前景应用.这是有道理的,因为广告数据包由系统处理并发送到应用程序,但为什么我的应用程序不能自己接收任何内容?
有没有人有类似的经历或知道这可能是由什么引起的?我已经阅读了关于背景和蓝牙的所有Apple资源,但没有关于此问题的提示.我正在使用iOS 5.1.1开发iOS 4s.我主要ViewController是一个CBCentralManagerDelegate委托看起来是这样的.
@implementation MainViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
self.centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
}
return self;
}
#pragma mark -
#pragma mark CBCentralManagerDelegate methods
- (void)centralManagerDidUpdateState:(CBCentralManager *)central
{
if( central.state == CBCentralManagerStatePoweredOn ){
NSArray *cbuuidArray = …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试在Android中编写一个类来扫描接入点,计算哪个接入点具有最佳信号,然后连接到该接入点.
因此,应用程序将能够在移动中扫描并随时附加到新的接入点.
我有扫描和计算最好的信号工作.
但是当涉及到附加到最佳接入点时,我遇到了麻烦.
似乎enableNetwork(netid,othersTrueFalse)是附加到Access点的唯一方法,但这会导致我的扫描结果出现问题我无法获得信号最强的接入点的id.
这是我的代码:
public void doWifiScan(){
scanTask = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
sResults = wifiManager.scan(getBaseContext());
if(sResults!=null)
Log.d("TIMER", "sResults count" + sResults.size());
ScanResult scan = wifiManager.calculateBestAP(sResults);
wifiManager.addNewAccessPoint(scan);
}
});
}};
t.schedule(scanTask, 3000, 30000);
}
Run Code Online (Sandbox Code Playgroud)
public ScanResult calculateBestAP(List<ScanResult> sResults){
ScanResult bestSignal = null;
for (ScanResult result : sResults) {
if (bestSignal == null
|| WifiManager.compareSignalLevel(bestSignal.level, result.level) < 0)
bestSignal = result;
}
String message = String.format("%s networks found. %s …Run Code Online (Sandbox Code Playgroud) 我想找到我当前使用Java代码连接的本地网络中设备的所有IP地址.有用的实用程序Advanced IP Scanner能够在我的子网中找到各种IP地址192.168.178/24:
根据这个答案,我按以下方式构建了我的代码:
import java.io.IOException;
import java.net.InetAddress;
public class IPScanner
{
public static void checkHosts(String subnet) throws IOException
{
int timeout = 100;
for (int i = 1; i < 255; i++)
{
String host = subnet + "." + i;
if (InetAddress.getByName(host).isReachable(timeout))
{
System.out.println(host + " is reachable");
}
}
}
public static void main(String[] arguments) throws IOException
{
checkHosts("192.168.178");
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不会打印出任何结果,这意味着无法访问任何IP地址.为什么?我的本地网络中有设备,如Advanced IP Scanner扫描中所见.
我正在编写一个用于查找附近WiFi客户端设备的Python模块.我当前所有的扫描程序都是侦听Probe Requests并记录客户端的MAC地址.
我遇到的问题是我完全依赖设备广播探测请求让我发现它.
我想知道是否有其他方式来发现设备.使用此站点作为802.11指南,我想出了这些想法:
我还没有测试过这两个想法.只是吐球.
思考?
我正在尝试增加wifi扫描速率,但使用方法wifi.startscan并获取返回的列表结果的信息,我没有看到rssi每2秒更改一次.我的问题是,是否有可能获得rssi的低速率扫描,如果有可能我怎么能这样做.
您能否为我提供扫描附近BLE设备的简单代码,并按设备名称和MAC ID列出.我使用http://developer.android.com/guide/topics/connectivity/bluetooth-le.html中提供的示例代码尝试了这一点.但是没有用,任何参考链接或想法,因为我是BLE应用程序的新手.
network-scan ×10
android ×6
wifi ×4
device ×2
java ×2
networking ×2
background ×1
bluetooth ×1
ios ×1
null ×1
python ×1
rate ×1
rssi ×1
signals ×1
wifimanager ×1
wireless ×1