出现此问题后,总是进行扫描。
此问题将关闭设备上的蓝牙。或者退出应用程序就会解决。当我让程序运行12小时时,出现了此问题。
似乎很少出现此问题,但我不知道是什么引发了此问题。
有人能帮助我解决此问题吗?
下面列出了终端信息、源代码和日志。
箭头M03
Android OS 6.0
'org.altbeacon:Android-beacon-library:2.16.2'
主体活动
public class MainActivity extends AppCompatActivity implements BeaconConsumer {
private BeaconManager beaconManager;
Region mRegion;
@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=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
beaconManager.getBeaconParsers().remove(0);
beaconManager.setForegroundBetweenScanPeriod(4000);
mRegion = new Region("ibeacon", null, null, null);
Button btnFore = (Button) findViewById(R.id.btnFore);
btnFore.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
beaconManager.bind(MainActivity.this);
beaconManager.setDebug(true);
}
});
thdWriteLog l_thdWriteLog = new thdWriteLog();
l_thdWriteLog.start();
}
@Override
public void onBeaconServiceConnect() {
beaconManager.addMonitorNotifier(new MonitorNotifier() {
@Override
public void didEnterRegion(Region region) {}
@Override
public void didExitRegion(Region region) {}
@Override
public void didDetermineStateForRegion(int i, Region region) {}
});
try {
beaconManager.startMonitoringBeaconsInRegion(mRegion);
} catch (RemoteException e) {
e.printStackTrace();
}
beaconManager.addRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {}
});
}
public class thdWriteLog extends Thread {
@Override
public void run() {
java.lang.Process proc = null;
BufferedReader reader = null;
PrintWriter writer = null;
final String pId = Integer.toString(android.os.Process.myPid());
try {
proc = Runtime.getRuntime().exec(new String[] { "logcat", "-v", "time"});
reader = new BufferedReader(new InputStreamReader(proc.getInputStream()), 1024);
String line;
while ( true ) {
line = reader.readLine();
if (line.length() == 0) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
}
continue;
}
if (line.indexOf(pId) != -1) {
try {
OutputStream out;
File l_file = new File(Environment.getExternalStorageDirectory().getPath() + "/log.text");
out = new FileOutputStream(l_file, true);
writer = new PrintWriter(new OutputStreamWriter(out,"UTF-8"));
String l_time = line.substring(0, 18);
String l_logType = line.substring(19, 21);
String l_logStr1 = line.substring(21, line.indexOf("):") + 2);
String l_logStr2 = line.substring(line.indexOf("):") + 3);
String l_logStr = l_time + ',' + l_logType + ',' + l_logStr1 + ',' + l_logStr2;
writer.println(l_logStr);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (writer != null) {
writer.close();
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
在日志中显示的情况下,向底层Android API发出的停止扫描的命令失败了:
08:54:22.813 D/CycledLeScannerForLollipop(21211): Stopping LE scan on scan handler
08:54:22.814 D/BluetoothAdapter(21211): STATE_ON
08:54:22.814 D/BluetoothLeScanner(21211): could not find callback wrapper
08:54:23.430 E/ CycledLeScannerForLollipop(21211): Scan failed: app cannot be registered
上面最后一行写着“扫描失败”,这实际上是指试图停止扫描。
这肯定是测试设备上蓝牙堆栈内部的问题。由于Android bluetooth堆栈和底层bluetooth芯片之间的接口总是涉及到OEM的一些专有定制,这很可能是由于该实现中的一些bug造成的。
我一直在使用Android AltBeacon库来监控和定位附近的iBeacons。该应用程序的一个特定要求是允许扫描信标检测,即使当应用程序在后台时也允许扫描信标检测,并且当应用程序关闭时完全停止扫描信标检测。 据我所知,这个需求可以通过bootstrapnotifier/regionbootstrap部分满足,但是扫描服务即使在应用程序关闭时也会重新启动,这是我不希望发生的。
为此,我创建了一个名为的单例。这个类处理所有的输入阅读内容。我创建了一个名为的方法,它将回调作为参数。在这个方法中,我创建了一个新线程,并在其中等待使用的输入。这个类还有方法,它向上面描述的线程发送中断消息。下面是该类的当前实现: 这个代码极不可靠。我一会儿就告诉你我的意思。我制作了一个名为Client的玩具类,在中,我用计时器模拟了消息收入。 以下是它的工作原理: 我知道这个问题非常长(也许是不
我对编程相当陌生。目前我正在做一个uni项目,用java创建一个基本的文本游戏。我遇到的问题是,如何实现一个不允许用户输入相同名称的业务规则。我把它设置好了,这样扫描仪就可以读取阵列了。我使用的是Java,这是我第一次使用这个论坛,所以我非常感谢大家提供的帮助,并提前感谢大家!:) 并为糟糕的格式道歉,我不知道如何正确发布。
如果我需要监视UUID的特定区域。 另一个问题,图书馆是否按位置查找信标? 非常感谢,问候
问题内容: 我的PC上没有太多内存,处理器也很弱。尽管到目前为止,netbeans是我最喜欢的IDE,但在我现有的计算机上使用它几乎是难以忍受的,因为打开程序时,项目扫描会自动开始。 有没有办法防止Netbeans扫描项目? 问题答案: 嗨,乔治,我不知道这是否是答案,但是我右键单击并在不需要打开的项目上选择“关闭”。将您过去的所有项目都列出在那里是没有意义的。只需将您正在开发的那个打开。您始终可
问题内容: 我试图在Go中编写一个扫描程序,以扫描连续行,并在返回之前清理掉行,以便您可以返回逻辑行。因此,给定以下SplitLine函数(Play): 我希望代码返回类似以下内容: 但是,它在返回第一行后停止。第二个电话返回。 任何人有任何想法,还是一个错误? 问题答案: 我认为这是一个错误,因为即使返回的令牌为nil(bufio.SplitFunc),也不会将Advance value> 0用