如何将安卓设备BLE扫描全量数据存储到应用外可访问的本地文件
解答
- 你所说的“点击触发FileOutputStream写入”的方案完全可以调整后用于存储全部BLE扫描信息,如果需要自动存储所有扫描记录,还可以在BLE扫描回调中追加写入逻辑,点击按钮可以作为手动触发写入/备份的补充入口。
- 你提供的两段代码存储路径有本质区别:
- 第一段使用
openFileOutput写入的是应用私有内部目录(路径为/data/data/[你的应用包名]/files/),该目录默认仅你的应用可访问,用户没有root权限的话无法直接查看,不符合你要的外部可访问需求。 - 第二段使用
Environment.getExternalStorageDirectory()生成的路径是设备内置公共存储目录,并非外置SD卡,完全符合你的存储要求,Android 9系统的实体机可以正常访问该目录下的文件,和模拟器演示效果一致。
- 第一段使用
- 要让第二段代码正常运行,你需要补充以下配置和修改:
- 在
AndroidManifest.xml中添加存储权限声明:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> - Android 6及以上系统需要动态申请存储权限,用户同意授权后才能正常写入文件,否则会抛出权限拒绝异常。
- 修正目录创建逻辑:原有
if (!file.mkdirs()){ file.mkdirs(); }是冗余无效代码,改为if (!file.exists()){ file.mkdirs(); }即可。 - 如果要存储全部扫描记录不被覆盖,初始化
FileOutputStream时需要追加模式参数:new FileOutputStream(FilePath, true),第二个参数为true时每次写入都会追加到文件末尾,不会清空之前的历史记录。 - 写入数据前建议将RSSI值、扫描时间拼接为可读性好的字符串(比如
"扫描时间:xxx,RSSI值:xxx\n"),再转为字节数组写入,避免直接写入字节导致文件打开后乱码。
- 在
- 写入完成后你可以直接用三星S8自带的系统文件管理器,找到根目录下的
Data文件夹,就能查看你存储的扫描记录文件。
内容的提问来源于stack exchange,提问作者GAZZA
相关产品推荐
相关产品推荐

