嘿大家!
在Android之前开始使用蓝牙编程.但现在我遇到了一些问题.我想知道为什么配对请求有时会出现在通知栏中,有时会跳过此对话框并直接显示对话框.
例如:我从嵌入式设备发起配对请求,然后会出现如下通知:
有时我不必费心去通知,我的对话框就像我预期的那样显示出来.
有没有办法捕获该通知并显示对话框,或者当我启动蓝牙配对时,这是我的代码中的错误?
编辑:
更新1:
检查了Reno给我的答案,这实际上取决于各种各样的事情.还有其他方法可以直接显示对话框.当配对请求到达时,调用以下方法.进行检查以查看对话框是应该显示在前台(true)还是显示为通知(false):
public boolean shouldShowDialogInForeground(String deviceAddress) {
// If Bluetooth Settings is visible
if (mForegroundActivity != null) return true;
long currentTimeMillis = System.currentTimeMillis();
SharedPreferences sharedPreferences = getSharedPreferences();
// If the device was in discoverABLE mode recently
long lastDiscoverableEndTime = sharedPreferences.getLong(
BluetoothDiscoverableEnabler.SHARED_PREFERENCES_KEY_DISCOVERABLE_END_TIMESTAMP, 0);
if ((lastDiscoverableEndTime + GRACE_PERIOD_TO_SHOW_DIALOGS_IN_FOREGROUND)
> currentTimeMillis) {
return true;
}
// If the device was discoverING recently
if (mAdapter != null && mAdapter.isDiscovering()) {
return true;
} else if ((sharedPreferences.getLong(SHARED_PREFERENCES_KEY_DISCOVERING_TIMESTAMP, 0) + …
Run Code Online (Sandbox Code Playgroud) 将deploy
命令运行到站点只会使终端闪烁,就像它在一些繁重的操作中卡住一样.
什么都不会发生.我实际上并没有尝试使用--debug
旗帜.
首先想到的是我是公司代理的幕后黑手.所以我设置了一个"纯粹"的连接,它仍然没有连接.那么问题是什么?
database deployment firebase firebase-hosting firebase-tools
在使用开发人员页面上的示例和教程首次实现NSDManager期间,应用程序成功启动了发现并找到了设备.
然而现在它似乎被打破了......
程序启动后,在初始化后,代码进入以下方法并成功运行:
public void discoverServices() {
Log.d(TAG, "Initializing discovery on NSD");
mNsdManager.discoverServices(
SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD, mDiscoveryListener);
}
Run Code Online (Sandbox Code Playgroud)
收到日志消息.经过一段时间(约5分钟),这是从程序输出:
05-21 11:08:32.518: E/NsdCamera(12236): Discovery failed: Error code:0
05-21 11:08:32.518: W/dalvikvm(12236): threadid=12: thread exiting with uncaught exception (group=0x40c9c930)
05-21 11:08:32.518: E/AndroidRuntime(12236): FATAL EXCEPTION: NsdManager
05-21 11:08:32.518: E/AndroidRuntime(12236): java.lang.NullPointerException
05-21 11:08:32.518: E/AndroidRuntime(12236): at android.net.nsd.NsdManager$ServiceHandler.handleMessage(NsdManager.java:338)
05-21 11:08:32.518: E/AndroidRuntime(12236): at android.os.Handler.dispatchMessage(Handler.java:99)
05-21 11:08:32.518: E/AndroidRuntime(12236): at android.os.Looper.loop(Looper.java:137)
05-21 11:08:32.518: E/AndroidRuntime(12236): at android.os.HandlerThread.run(HandlerThread.java:60)
Run Code Online (Sandbox Code Playgroud)
还来自服务:
05-21 11:50:49.108: E/NativeDaemonConnector.ResponseQueue(8858): Timeout waiting for response
05-21 11:50:49.108: E/mDnsConnector(8858): …
Run Code Online (Sandbox Code Playgroud) 最近,我尝试让配对过程以编程方式工作,并且成功了。但我最近发现我的应用程序的用户可以连接到几个“有趣的”设备。所以我必须提示用户选择要连接的设备
所以我必须将用户连接到已经配对的蓝牙设备。但我的努力都没有效果。我尝试使用以下命令再次运行配对过程:
tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
还有以下内容:
Method m = mmDevice.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
mmSocket = (BluetoothSocket) m.invoke(mmDevice, 1);
Run Code Online (Sandbox Code Playgroud)
这是我已经实现的方法,也是将我的手机与嵌入式蓝牙设备配对的唯一有效方法
所以我的问题是:
我正在尝试用 C 编写一个程序,将捕获的Raw 16kHz PCM 16 位文件转换为16 位 WAV。
我读过一些帖子,人们推荐使用libsox
. 安装了它,现在我真的很难理解手册页。
到目前为止(通过阅读源代码中的示例)我已经发现structs
:
大概可以用来描述我输入的数据。如果有必要,我也知道我正在处理多少信息(时间)?
一些指导表示赞赏!
在运行为MIPS编译的程序时,我偶然发现了一个非常奇怪的问题.下面的代码片段是获取时间纪元并将其以微秒精度存储在unsigned long long
变量中.
该变量能够存储我检查过的8个字节sizeof(unsigned long long)
.
这段代码打印出来很奇怪:
unsigned long long microtime=0;
struct timeval time_camera = { .tv_sec=0, .tv_usec=0 };
gettimeofday(&time_camera,NULL);
microtime = time_camera.tv_sec * 1000000 + time_camera.tv_usec;
printf("Times is now %llu , time since epoch in seconds is: %lu\n", microtime, time_camera.tv_sec);
Run Code Online (Sandbox Code Playgroud)
它给了我以下输出:
>> Times is now 484305845 , time since epoch in seconds is: 1357751315
Run Code Online (Sandbox Code Playgroud)
但是,当我将计算分解为不同的行时,它才有效!:
unsigned long long microtime=0;
struct timeval time_camera = { .tv_sec=0, .tv_usec=0 };
gettimeofday(&time_camera,NULL);
microtime = time_camera.tv_sec;
microtime = microtime * …
Run Code Online (Sandbox Code Playgroud)