Tag: 蓝牙

在深度睡眠中连接到蓝牙设备失败

我试图每隔25秒连接一个配对的蓝牙设备,通过AlarmManager调度,触发WakefulBroadcastReceiver启动服务进行连接。 一旦设备进入睡眠状态,一切都会在最初的几个小时内发挥作用,但是大约4-5个小时后,当我认为设备进入深度睡眠状态时,它会开始失效。 我从ParcelFileDescriptor得到一个NullPointerException,声明“FileDescriptor不能为空”。 我已经尝试过搜索这个错误,甚至已经浏览了ParcelFileDescriptor.java中的代码,但我已经走到了尽头。 我在带有Android 4.4.2的Nexus 10上运行它。 尝试连接的代码如下: public GatewaySocket getSocket() throws IOException { if (!BluetoothAdapter.checkBluetoothAddress(macAddress)) return new GatewaySocket(“Address ” + macAddress + ” is not a valid Bluetooth MAC Address”); BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter(); if (bluetooth == null) return new GatewaySocket(“Sorry, no Bluetooth adapter available”); BluetoothDevice device = bluetooth.getRemoteDevice(macAddress); BluetoothSocket btSocket = null; try […]

通过蓝牙在python和Java之间正确发送数据

我实际上是在智能手机上开发应用程序(频谱分析仪)。 这个应用程序可以通过蓝牙与覆盆子pi 3和扫描频率从我的RTLSDR-2832(插入RPI3)进行通信。 我写了一个脚本来从我的RTLSDR-2832获取样本,然后我通过蓝牙将它发送到我的应用程序: from pylab import* from rtlsdr import* from bluetooth import* import sys #configure device sdr= RtlSdr() sdr.sample_rate=double(sys.argv[3]) sdr.gain=double(sys.argv[2]) sdr.center_freq=double(sys.argv[1]) NFFT=50 #Bluetooth connection server_sock=BluetoothSocket(RFCOMM) server_sock.bind((“”,PORT_ANY)) server_sock.listen(1) port=server_sock.getsockname()[1] uuid=”94f39d29-7d6d-437d-973b-fba39e49d4ee” client_sock,client_info=server_sock.accept() while(1): samples=sdr.read_samples(256*1024) result=psd(samples,NFFT, Fs=sdr.sample_rate/1e6, Fc=sdr.center_freq*1e6/1e6) tab_freq=(result[1]/1e6) value_freq=str(tab_freq)[1:-1] value_list=[format(float(v), “.10f”) for v in value_freq.split()] value_freq2= “\n”.join(value_list) tab_pxx=result[0] value_pxx=str(tab_pxx)[1:-1] client_sock.send(value_freq2+’\n’+’\n’.join(value_pxx.split())) 因此,使用此脚本,我可以从RTLSDR2838获取数据并发送数据。 我先通过蓝牙发送所有数据freq,然后是pxx值(以db / Hz为单位)。 我得到了我的应用程序的所有数据: private […]

申请停止后Btld消耗资源?

我正在编写一个基于蓝牙的小型串行控制程序,与微控制器板上的串行BT调制解调器通信。 它主要基于Android BluetoothChat示例程序。 当我第一次从Eclipse运行程序时,它安装并运行得很好。 但是,我发现存在一些问题,当我对程序进行更改并重新运行时,手机运行速度会非常慢。 这在活动管理器中报告,因为btld占用了94%的CPU资源。 此时唯一的解决方案是取出电池并重启手机。 我已经尝试进入活动并停止与BT相关的任何事情,但这没有帮助。 此外,我刚刚使用Android的标准BluetoothChat程序对其进行了测试,它也做了同样的事情。 它不是我的附加代码所特有的。 我也相信,经过一些实验,当应用程序停止时会出现问题,当您强制停止它或安装新软件包时会发生这种情况。 它已经变得令人难以置信的烦恼,因为每次发生时,我必须重新启动或取出电池 – 这可能是一个5分钟的过程。 根本不适合调试。 我在HTC Inspire 4G(2.2)上使用Eclipse(Java)等运行它。 我的问题是: 如何阻止btld消耗资源? 更重要的是,导致这种情况发生的原因是什么?我的代码中应该做些什么? 有关详细信息,我在程序关闭期间从DDMS输出,然后关闭BT。 看起来DVM难以停止BT服务。 我删除了很多调试消息,除非它们与蓝牙等有关。 07-06 19:54:10.334: INFO/ActivityManager(1290): Force stopping package com.*******.*******.controller uid=10149 07-06 19:54:10.341: ERROR/PhoneApp(1446): — PackageChangeBroadcastReceiver action = android.intent.action.PACKAGE_RESTARTED 07-06 19:54:10.441: DEBUG/BluetoothService(1290): Tracked app 3520 died 07-06 19:54:10.441: INFO/BTL-IFS-WRAPPER(1592): rx_data: socket disconnected. 07-06 19:54:10.441: […]

在Android设备之间传输文件?

我正在编写代码,我想将mp4文件发送到另一个Android设备。 我已经通过Wifi连接两个Androids并从一个简单的循环中写入1-20,而另一个Android设备读取并显示发送的号码。 这是“发件人”的有趣部分: InetAddress serverAddr = InetAddress.getByName(serverIpAddress); Log.d(“ClientActivity”, “C: Connecting…”); Socket socket = new Socket(serverAddr, port); connected = true; while (connected) { try { Log.d(“ClientActivity”, “C: Sending command.”); PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket .getOutputStream())), true); for (int i = 1; i < 20; i++) { out.println(i); i=i++; 和“接收者”: serverSocket = new ServerSocket(SERVERPORT); // […]

通过蓝牙与Android发送数据

我编写了代码,通过蓝牙连接Android设备并将数据发送到另一个设备。 从该课程开始运行时一切正常。 当我创建类的实例时,数据在连接创建完成之前被发送到输出流。 在发送数据之前如何检查连接是否已启动? package com.flightscope.app.metawatch; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import com.flightscope.app.metawatch.Crc; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Typeface; import android.util.Log; public class MetawatchConnected { // public static final String TAG = “MetawatchConnected”; private BluetoothSocket mSocket; private BluetoothDevice mMetawatchDevice; private […]

Android中不安全的蓝牙连接

我被一位教授挑战,在Android上开发一个小型蓝牙演示应用程序。 直到两周前他给我这个挑战时,我对Android的开发一无所知。 我对Java编程也很陌生,所以我从远处开始。 但无论如何… 所以我做了大部分的教程,我读到了Android中的蓝牙,看了蓝牙聊天示例代码,我现在正在尝试做我的小应用程序。 因此,对于我的演示,我将尝试在我的真实手机和蓝牙鼠标之间建立连接。 我想在我的手机屏幕上移动一个形状以响应我的鼠标移动。 我遇到很多问题,但到目前为止我的主要问题是用不安全的鼠标打开一个sockets。 当我尝试使用listenUsingRfcommWithServiceRecord方法listenUsingRfcommWithServiceRecord ,它会将UUID作为参数。 但我的鼠标很可能没有UUID来响应,所以我猜这种方法并不好。 当我阅读有关此方法的文档时,它说要使用像鼠标这样的设备打开不安全的服务器套接字,我必须使用listenUsingInsecureRfcommWithServiceRecord方法。 但是当我调用它时,这个方法是不可用的,它以红色加下划线,而Eclipse表示它对于BluetoothAdapter类型是未定义的。 private BluetoothServerSocket connectDevice(BluetoothAdapter adapter, BluetoothDevice device){ BluetoothServerSocket socket = null; try{ socket = adapter.listenUsingInsecureRfcommWithServiceRecord(device.getName(), UUID.randomUUID()); } catch(IOException e){ Toast.makeText(this, “Connection failed.\n” + e.getMessage(), Toast.LENGTH_SHORT); } return socket; } 如果我做错了,请不要激怒我,这是我的第一个问题,我开始使用Java编程。

Android:通过Sco蓝牙耳机播放声音

在过去的几天里,我一直试图从我的Android手机上播放我的sco蓝牙耳机上的任何声音。 我这个项目的最终目标是最终制作一个车库门开启器,但首先我需要能够通过耳机播放声音。 这是我正在使用的当前代码的基础: ==Manifest== ==Code== audioManager = (AudioManager) getSystemService(AUDIO_SERVICE); audioManager.setMode(AudioManager.MODE_IN_CALL); audioManager.startBluetoothSco(); audioManager.setBluetoothScoOn(true); short[] soundData = new short [8000*20]; for (int iii = 0; iii < 20*8000; iii++) { soundData[iii] = 32767; iii++; soundData[iii] = -32768; } audioTrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 8000, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, soundData.length * Short.SIZE, AudioTrack.MODE_STATIC); audioTrack.write(soundData, 0, soundData.length); audioTrack.play(); 在我运行之前,我将蓝牙耳机与手机配对并连接。 我通过调用我的语音邮件validation了它的工作原理。 然而,当我运行我的代码时,任何地方都没有声音。 以下是不同代码行的效果: […]

蓝牙j2se和j2me

我正在开发一个软件,用户通过蓝牙从他们的j2me启用手机发送消息。 服务器(支持蓝牙的笔记本电脑)收到它并发送一些确认消息。 基本上是2个软件j2se服务器和j2me客户端 我该怎么做? 我需要在netbeans下这样做。 我从哪里开始? 任何适用于j2me和j2se的API? ..没有太多时间,所以需要一个简单的。 安全不是问题,

是否有针对Java的蓝牙上的任何TCP / IP堆栈实现,更具体的Android?

我需要做的是与蓝牙设备配对,该设备托管一些网络服务并浏览DNS-SD服务。 然后我必须选择其中一个发现的服务,并通过https或其他安全方法发出一些http请求。 我已经通过WiFi做了这个,但由于某些原因,需要通过蓝牙做同样的事情。 我昨天做了一些研究,但我还没找到我需要的东西。 我不知道如何处理这个问题。 欢迎提出任何意见。 谢谢!

当Sphero同步并且我使用多个活动时如何保持蓝牙连接

当我与Sphero同步并且我想从一个活动传递到另一个活动时,我的同步将丢失,我必须在新活动中使用onCreate中的此方法再次获得同步: **RobotProvider provider = RobotProvider.getDefaultProvider(); mRobot = provider.findRobot(robot_id); provider.initiateConnection(robot_id); provider.control(mRobot); provider.connectControlledRobots();** mRobot具有Sphero的MAC地址。 但是我尝试它的所有时间并不好,我想保留所有应用程序的蓝牙连接,因为我第一次连接并且能够保持它而不再同步。 我已经看到Sphero的官方Orbotix应用程序,我认为是完美的,因为同步是永久性的。 你能用这种方式帮助我吗?