8

几天前,我在 Google Play 商店下载了蓝牙智能扫描仪软件。在我的三星 Galaxy S3 手机上安装后,我可以成功扫描我的蓝牙 LE 设备。

即使我尝试了所有方法来扫描我的蓝牙 LE 设备,我的计算机上也没有显示任何内容。于是我反编译了这个软件,startLeDiscovery()包里面有个方法android.bluetoothandroid.jar但让我感到困惑的是,我的 android sdk 15中不存在这种方法。

最后,我把蓝牙智能扫描仪软件的BlutoothAdapter.class文件和BluetoothDevice.class文件替换成了android.jar它们,这样我就可以startLeDiscovery()在Eclipse中成功调用该方法了。源代码如下图所示。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    IntentFilter intent = new IntentFilter();
    intent.addAction(BluetoothDevice.ACTION_FOUND);
    intent.addAction(BluetoothDevice.EXTRA_UUID);
    intent.addAction(BluetoothDevice.ACTION_GATT_PRIMARY_UUID);

    registerReceiver(searchDevices, intent);
    //bluetooth.discovery();      
    bluetooth.startLeDiscovery();

  }  
    private BroadcastReceiver searchDevices = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        BluetoothDevice device = null;

        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);   
            String msg = device.getName()+"\n"+device.getAddress();
            Log.i("hella",msg);
            bluetooth.cancelDiscovery();
            connectDevice(device);
        }
    }       
};`

事实证明,我在 Galaxy s3 手机上成功扫描了我的蓝牙 LE 设备,正如我所想的那样。否则,我发现那里也有一个com.samsung.bluetoothle包。同样的,我在我的android.jar. 但我无法使用该包中的这些方法连接到我的 LE 设备。

我恳请您帮助解决这个困扰我们很长时间的问题。为了方便开发,我会android.jar在网站上贡献我的。您将在目录中看到startLeDiscovery()方法和其他方法。android.bluetooth当然,目录中也有一个 com.samsung.bluetoothleandroid

你可以在这里android.jar下载包(镜像)。

4

2 回答 2

0

android.jar文件被认为是您的 Android 设备上已经可用的类:如果我没记错的话,这些类不包含在为您的应用程序生成的 APK 中,因此添加这些com.samsung.bluetoothleandroid.jar不会使它们添加到您的应用程序中。

为什么不直接从三星网站 ( http://developer.samsung.com/bleandroid.jar )下载整个 SDK并以推荐的方式使用它,而不是反编译并将其添加到文件中?

于 2013-05-29T17:32:24.180 回答
0

你需要在你的 AndroidManifest.xml 中有一个 uses-library 标签来告诉应用程序使用 Galaxy S3 蓝牙库。三星从未为开发人员公开发布过库,因此您必须制作自己的 jar 文件以进行编译,但不要将 jar 包含在您的 apk 的包装中。

<uses-library android:name="com.samsung.bluetoothle.BluetoothLEClientProfile" android:required="false" />

要访问 BluetoothAdapter 和 BluetoothDevice 的方法,最好使用反射来获取对所需方法的引用并以这种方式调用它们。

于 2013-10-06T13:38:07.440 回答