如何在android中的ble中每5秒更新一次电池电量

2024-04-07

在下面的编码中,我得到了一定百分比的电池电量。但我想调用通知特性,以便每 5 到 10 秒更新一次电池百分比。所以请帮助我。以下是我的设备控制活动,在此我编码如下。

             private final BroadcastReceiver mGattUpdateReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();


        if (BluetoothLeService.ACTION_DATA_AVAILABLE.equals(action)) {
            displayData(intent.getStringExtra(BluetoothLeService.EXTRA_DATA));
        }

    }
};

在下面的方法中,我设置电池值并在图像上以百分比值显示。

                  private void displayData(String data) {
    Log.v("______________________No serives_______________",data );
    if (data != null) { 
        mBluetoothLeService.setCharacteristicNotification(mNotifyCharacteristic, true);
        battery.setText(data);
        int x=Integer.parseInt(battery.getText().toString());
   image_level.getLayoutParams().height =  x*2;
    }
    else if (data==null)
          battery.setText(data);
 }

以下是我的 ble 服务,在此我添加了设置通知方法 wh 如下。

               public void setCharacteristicNotification(BluetoothGattCharacteristic characteristic,
                                          boolean enabled) {
    if (mBluetoothAdapter == null || mBluetoothGatt == null) {
        Log.w(TAG, "BluetoothAdapter not initialized");
        return;
    }
    mBluetoothGatt.setCharacteristicNotification(characteristic, enabled);


    //For cube write
    if (UUID_BatteryService.equals(characteristic.getUuid())) {
         BluetoothGattDescriptor descriptor = characteristic.getDescriptor(
                UUID.fromString(SampleGattAttributes.CLIENT_CHARACTERISTIC_CONFIG));
        descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
        mBluetoothGatt.writeDescriptor(descriptor);
    }


}
        public void onCharacteristicChanged(BluetoothGatt gatt,
                                        BluetoothGattCharacteristic characteristic) {
        broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic);
    }
};

公共布尔 writeCharacteristic(BluetoothGattCharacteristic i){

    //check mBluetoothGatt is available
    if (mBluetoothGatt == null) {
        Log.e(TAG, "lost connection");

        return false;
    }
    BluetoothGattService Service = mBluetoothGatt.getService(UUID_BatteryService);
    if (Service == null) {
        Log.e(TAG, "service not found!");

        //////////NO service found...........
         return false;
    }


    boolean status = mBluetoothGatt.writeCharacteristic(i);

    Log.e(TAG, "bluetooth write status"+status);
    return status;
}

            private void broadcastUpdate(final String action) {
    final Intent intent = new Intent(action);
    sendBroadcast(intent);
}

   private void broadcastUpdate(final String action,
         final BluetoothGattCharacteristic characteristic) {
   final Intent intent = new Intent(action);
         if(SampleGattAttributes.CLIENT_CHARACTERISTIC_CONFIG_BATTERY.
           toString().
      equalsIgnoreCase(characteristic.getUuid().toString())) {
         Log.v("_____________","in broadcastupdate..........");


    final byte[] data = characteristic.getValue();
         if (data != null && data.length > 0) {
        final StringBuilder stringBuilder = new StringBuilder(data.length);
        for(byte byteChar : data)
        stringBuilder.append(String.format("%02X ", byteChar));

        final   int flag = characteristic.getProperties();
        int format = -1;
        if ((flag & 0x01) != 0) {
        format = BluetoothGattCharacteristic.FORMAT_UINT16;
        Log.d(TAG, " format UINT16.");
        } else {
        format = BluetoothGattCharacteristic.FORMAT_UINT8;
        Log.d(TAG, "  UINT8.");
        }
        int batterylevel = characteristic.getIntValue(format, 0);
        intent.putExtra(EXTRA_DATA, String.valueOf(batterylevel));
        //intent.putExtra(EXTRA_DATA,new String(data));

        }
        }        
    sendBroadcast(intent);
}

如果我很好地理解你的问题,你将需要一个计时器来定期检查你的电池电量。

例如,您可以在启动设备控制活动后使用此代码,也许在 onServiceConnected 方法的末尾:

请将定时器放在 mServiceConnection 对象的 onServiceConnected() 方法的末尾

Timer timer = new Timer("batteryTimer");
TimerTask task = new TimerTask() {
@Override
public void run() {
mBluetoothLeService.getBattery();
}
};
timer.scheduleAtFixedRate(task, 0, 5000);

并且不要忘记在活动完成时调用timer.cancel()。

在服务中,您可以放置​​类似的内容:

public void getBattery() {

if (mBluetoothGatt == null) {
Log.e(TAG, "lost connection");
} 

BluetoothGattService batteryService = mBluetoothGatt.getService(Battery_Service_UUID);
if(batteryService == null) {
Log.d(TAG, "Battery service not found!");
return;
}

BluetoothGattCharacteristic batteryLevel = batteryService.getCharacteristic(Battery_Level_UUID);
if(batteryLevel == null) {
Log.d(TAG, "Battery level not found!");
return;
}

mBluetoothGatt.readCharacteristic(batteryLevel);
}

这是一个需要修改的示例,但它可以让您了解如何进行修改。

有人已经在下面的链接中访问了电池值:连接BLE设备后如何获取电池电量? https://stackoverflow.com/questions/19539535/how-to-get-the-battery-level-after-connect-to-the-ble-device

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在android中的ble中每5秒更新一次电池电量 的相关文章

  • Android:如何在多语言资源中重用字符串

    自从我的第一个 Android 项目以来 这个问题一直困扰着我 考虑以 en 作为默认值的多语言字符串资源 res values strings xml lt The default language en res values de st
  • Android 中读取未提交的事务

    我正在进行大量数据库操作 这会向我的数据库添加大约 10 000 条记录 由于这可能需要很长时间 因此最好使用事务 db startTransaction do write operations db setTransactionSucce
  • 删除 Android 中切换按钮的填充

    我正在 android 中创建一个简单的切换按钮并将背景设置为可绘制对象
  • 带有 CollapsingToolbarLayout 的 PreferenceFragment

    我想要具有滚动活动的首选项片段 例如 Telegram 应用程序 我用了一个android support v7 widget RecyclerView in FrameLayout这是我的活动 xml
  • SQLite 中的 NOT NULL 列和错误捕获

    我有一个由用户定义的 EditText 填充的数据库 所有编辑文本都不允许有空字段 我知道我可以通过几个简单的 if 语句来检查这一点 if myEditText getText toString equals display error
  • 如何使用 Retrofit 2 和 RxJava 处理分页

    我知道如何处理 Retrofit 响应 但在使用 rx java 处理来自 REST API 的分页时遇到问题 背景 我使用的其余 api 为我提供了以下响应 并在标题中提供了下一页的链接 HTTP 200 OK Allow GET HEA
  • 针对 Android 开发优化 Eclipse

    我使用 Eclipse 和 ADT 插件开发 Android 而且速度 很慢 我必须经常重新启动 当我打开各种 Android 项目 当我使用库项目时需要 时 情况会变得更糟 使用 ADT 插件时 是否可以进行任何具体优化来提高 Eclip
  • 您如何在 Android 上处理超高 MP 相机(和图像)? - “画布:尝试绘制太大的位图”

    我有一个活动 用户可以像这样打开相机 getPictureUri createImageFromFile true let photoUri it openCameraActivity REQUEST IMAGE CAPTURE it ph
  • 无法从视图转换为按钮

    我在这里遇到非常令人沮丧的问题 我有这个代码 Button b findViewById android R id button1 我收到了这个错误 类型不匹配 无法将表单视图转换为按钮 但是按钮1is一个按钮 在我的 XML 布局文档中
  • 终端 (Mac) 上的 ndk-build 命令出错

    这是我在 bashrc 中的环境变量设置 export ANDROID SDK AndroidSDK android sdks export ANDROID NDK AndroidNDK android ndk r8d export PAT
  • 如何在谷歌地图上显示闪烁的图标

    我想在谷歌地图上显示用户的当前位置 每件事对我来说都运转良好 我只是使用标记在地图上显示当前位置 现在我想让该标记像 Android 手机上的原始谷歌地图应用程序一样闪烁 我想我必须使用动画来达到这个目的 但我不知道如何使用它 我正在互联网
  • Android 原生 AAssetManager 的文件层次结构

    Issue 我想知道如何从本机代码创建 Android 中资产文件夹的文件层次结构 我在用着AAssetManager openDir but AAssetDir getNextFileName不返回任何目录名称 因此基本上我无法深入了解层
  • 即时应用程序上的文本转语音崩溃

    我正在实现一个即时应用程序 该应用程序利用 Android 设备上提供的文本转语音功能 我已经设法得到了TextToSpeech按照 Android 开发博客文章中详细说明的说明 实例已初始化并可在非即时应用程序中正常工作Android 中
  • Android中从一个应用程序向另一个应用程序发送数据时的加密

    我想将敏感数据从一个应用程序发送到另一个应用程序 我使用 Intent 并通过 Bundle 发送数据 现在 我应该使用加密算法来加密要发送的数据 同时接收器应用程序将解密数据 哪种算法最适合移动平台 我浏览过RSA文档 建议不建议用于长文
  • Android HTTP PUT 请求

    谁能给我一个HTTP PUT请求 Android 的示例代码 假设您想使用 HttpURLConnection 要执行 HTTP PUT 请使用以下命令 URL url new URL http www example com resour
  • 为什么我的字体大小在 android webview 对象中看起来比在 android 浏览器中查看时大得多?

    我正在尝试制作一个小型 Android 应用程序 它除了在 webview 对象而不是浏览中显示网站之外什么也不做 到目前为止它加载了目标网页 但文本和图像大小都比查看页面时大得多在实际设备浏览器中 在浏览器中 页面看起来正确 但在我的应用
  • Android - onLoadFinished 未调用

    我遇到了装载机的问题 我有一个活动 它显示从本地数据库检索的记录列表 当活动启动时 记录会通过 LoaderManager initLoader 方法自动加载 还可以通过 ActionBarSherlock 中的刷新按钮手动刷新列表 但是
  • Android 布局以 开头 [重复]

    这个问题在这里已经有答案了 我是 Android 应用程序开发的初学者 我的问题很简单 我似乎无法确定布局文件夹中的 xml 文件是否应以以下开头 当我制作一个入门项目时 它不存在 但我也在读一本书 上面说它应该在那里 正确的方法是什么 嗯
  • Visual Studio代码无法检测到模拟器设备或连接的电话

    I was running my app with vscode using Android emulator or my phone however all of a sudden vscode could not identify an
  • PinnedHeaderListView 滚动和标题问题

    背景 我正在尝试模仿 Lollipop 的联系人应用程序显示联系人首字母的固定标题的方式 正如我所写的here https stackoverflow com q 27621425 878126 问题 由于原始代码 发现here http

随机推荐

  • 路由应用程序覆盖文件[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我最近将我的游戏提交到了 App Store 它最近已获得批准 正在 App Store 处理 当我单击我的应用程序时 它显示 路由应用程序覆盖文件
  • GWT-出口商。工作示例

    我有一个 Java 库 我需要将其转换为 JS 我找到了解决方案GWT 创建实用的 javascript 库 https stackoverflow com questions 3125556 gwt to create utility j
  • 打开第二个 fancybox 在另一个 fancybox 中!

    嘿 我的花式盒子遇到了麻烦 我正在一个 fancybox 中启动一个表单 一般是通过fancybox以iframe方式打开 因为它是作为其他域的小部件启动的 在此 iframe 中 我打开第二个 fancybox 来显示验证错误 所有这一切
  • 展开方案中的函数

    Goal 实施unfold仅使用两个参数的函数 论据 第一个参数是 f 它接受某种类型 I 的初始值并返回 nil 或两个元素的 cons 对 这两个元素中的第一个是某种类型 A 的列表中的下一个元素 下一个初始值又是某些类型 I 第二个参
  • 我如何编写一个 SQL 查询来检查列是否为零,它将更新它,如果不是,它将移动到下一列?

    详细地说 我目前正在构建一个应用程序 让人们创建帐户并登录 他们提供的信息已保存到我的数据库中 我的数据库仅包含一张保存用户信息的表 每一行都是一个用户 这是一张可以让您更好地了解的图片 前六列包含用户信息 但是 在我的应用程序中 用户有一
  • Ruby:尝试获取哈希数组上的枚举器时,nil:NilClass 的未定义方法“[]”

    我正在尝试循环哈希数组 当我到达获取枚举器以开始循环的位置时 出现以下错误 undefined method for nil NilClass 我的代码如下所示 def extraireAttributs attributsParam cl
  • 如何使用 vim 的 :sh 命令来获取我的 bashrc?

    每当我使用 sh 在 vi m 中启动 shell 时 它都不会获取我的 bashrc 文件 我怎样才能让它自动执行此操作 See help shell http vimdoc sourceforge net htmldoc options
  • 期间发生内部错误:“更新 Maven 依赖项”

    每当我运行 eclipse 时 我都会收到以下消息 An internal error occurred during Updating Maven Dependencies Lorg codehaus plexus archiver ja
  • 快速向 AVPlayer 添加自定义控件

    我正在尝试创建一个表格视图 以便能够播放视频 我可以使用 AVPlayer 和图层来做到这一点 我想在视频视图底部添加带有滑块的自定义播放和暂停按钮 AVPlayerController 内置有这些控件 我如何在 AVPlayer 中实现这
  • 将报告 (RDLC) 设置为横向打印和 A4

    有没有办法将 RDLC 报告设置为始终横向并始终使用 A4 而无需每次通过打印对话框手动执行此操作 我已经在这个问题上呆了几个小时了 谷歌搜索后什么也没有出现 事实上 有没有办法跳过打印对话框本身 TIA 您当然可以避免打印对话框并直接打印
  • 使用 CursorAdapter 正确实现更改 ListView 数据

    我有一个通过 CursorAdapter 填充的 ListView 我让我的用户能够更改列表中的数据 例如 用户可以将一行标记为未读 数据是消息 假设我的用户将一行标记为未读 正确的实现是否会将数据库中的行标记为已读 然后重新查询游标 正确
  • 动态创建具有不同亮度的颜色

    我有一种颜色 我只在运行时知道 我想使用这种颜色创建两种新颜色 一种非常明亮 一种不明亮 为了澄清一下 假设我的颜色是红色 我想创建 浅红色 颜色和 深红色 颜色的十六进制值 我该怎么做呢 我的代码是使用 GWT 用 Ja va 编写的 将
  • Microsoft JScript 运行时错误:“jQuery”未定义

    我是 ASP MVC 3 菜鸟 正在学习音乐商店教程http www asp net mvc tutorials mvc music store mvc music store part 5 http www asp net mvc tut
  • 将 posixlt 作为新列添加到数据框中

    我正在创建一些随机数 data lt matrix runif 10 0 1 ncol 2 dataframe lt data frame data gt dataframe X1 X2 1 0 7981783 0 13233858 2 0
  • 事务范围的持久性上下文和扩展持久性上下文有什么区别?

    事务范围的持久性上下文和扩展持久性上下文有什么区别 差异在JSR 220 http jcp org aboutJava communityprocess final jsr220 index htmlEnterprise JavaBeans
  • Kubernetes 网络插件

    我已经使用 calico 网络插件安装了 3 个节点的 Kubernetes 集群 出于某种原因 我决定完全删除 kubernetes 并使用不同的网络插件重新安装它 Flannel 一切看起来都很好 直到我尝试部署我的第一个容器 kube
  • 尝试使用 unixODBC/FreeTDS 连接到 PHP 中的 MS SQL Server 时出现 iODBC 错误

    我正在尝试从 Mac 上的 PHP 连接到远程 MS SQL Server 数据库 最终在 Ubuntu 服务器上 使用 FreeTDS 和 unixODBC 但即使我似乎已正确设置所有内容 我仍收到 iODBC 错误 并且我 我不知道如何
  • 在 iOS 3.0 上运行 iOS4 内置的应用程序,为什么一切都很大?

    我的背景和图标都很大 就像放大了 2 倍一样 有什么想法吗 检查应用程序中的图像 应该有两组图像 其中一组为双分辨率且后缀为 2x 如果只有一组并且它们看起来很大 那么开发人员很可能从未打算在不运行 iOS4 的设备上运行该应用程序 这看起
  • Angularjs - ng-model 未定义

    我正在构建一个相当复杂的指令 其中我需要访问模板中特定元素上的 ng model 该元素包含在 ng if 指令中 我有一个plunker http plnkr co edit bQSIZE6gik36UkJkvTM0 p preview下
  • 如何在android中的ble中每5秒更新一次电池电量

    在下面的编码中 我得到了一定百分比的电池电量 但我想调用通知特性 以便每 5 到 10 秒更新一次电池百分比 所以请帮助我 以下是我的设备控制活动 在此我编码如下 private final BroadcastReceiver mGattU