Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Bloodtooth(血牙)

修复 Android 10+ 系统分享界面缺失蓝牙选项的轻量级工具


📱 问题背景

从 Android 10(API 29)开始,Google 对文件分享机制进行了更严格的限制。许多用户发现,在文件管理器或应用中长按文件选择"分享"时,系统弹出的分享列表中不再显示蓝牙选项,即使设备蓝牙功能完全正常。

这是因为 Android 10+ 引入了 Scoped Storage 和更严格的 FileProvider 权限管理,导致传统的蓝牙分享入口被隐藏或移除,给用户通过蓝牙传输文件(尤其是 APK 安装包)带来了不便。


🎯 解决方案

Bloodtooth 作为一个"中间人"应用,通过以下机制恢复蓝牙分享功能:

  1. 接收分享 Intent —— 注册为分享目标应用,捕获系统 ACTION_SEND 事件
  2. 权限适配 —— 自动处理 Android 12+ 新增的 BLUETOOTH_CONNECT 运行时权限
  3. 蓝牙状态检测 —— 智能引导用户开启蓝牙(如未开启)
  4. 文件缓存与转换 —— 将接收到的文件复制到应用缓存目录,并通过 FileProvider 生成安全的 content:// URI
  5. 直接唤起蓝牙传输 —— 绕过系统分享界面,直接调用蓝牙 OPP(Object Push Profile)传输组件

⚙️ 工作原理

用户选择文件 → 分享到 "Bloodtooth"
                    ↓
         [检查蓝牙权限 & 蓝牙状态]
                    ↓
         [将文件复制到应用缓存目录]
                    ↓
         [通过 FileProvider 生成安全 URI]
                    ↓
         [直接启动 BluetoothOppLauncherActivity]
                    ↓
         系统蓝牙设备选择界面 → 选择接收方 → 传输完成
                    ↓
         [60秒后自动清理缓存文件]

核心技术点

技术 说明
Intent.ACTION_SEND 作为分享中介接收任意文件类型
FileProvider 解决 Android 7.0+ 的 file:// URI 暴露问题
BluetoothOppLauncherActivity 直接调用系统蓝牙传输组件,绕过分享列表
动态权限申请 适配 Android 6.0+ 运行时权限及 Android 12+ 蓝牙权限
临时文件管理 自动清理机制防止缓存堆积

🚀 使用方法

  1. 安装应用 —— 安装 Bloodtooth APK
  2. 选择文件 —— 在文件管理器中长按任意文件(支持 APK、图片、文档等)
  3. 点击分享 —— 选择"分享"按钮
  4. 选择 Bloodtooth —— 在分享列表中找到并点击"血牙"
  5. 蓝牙传输 —— 应用自动唤起蓝牙设备选择界面,选择目标设备即可传输

💡 提示:如果蓝牙未开启,应用会自动弹出请求;首次使用需要授予蓝牙连接权限。


📋 系统要求

  • 最低系统:Android 5.0(API 21)
  • 目标系统:Android 10+(API 29+ 效果最佳)
  • 必要权限:蓝牙、蓝牙连接(Android 12+)、存储访问

🔧 技术细节

权限声明

<!-- Android 12+ 需要 -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<!-- 基础蓝牙权限 -->
<uses-permission android:name="android.permission.BLUETOOTH" />

FileProvider 配置

应用使用 com.bloodtooth.bluetooth.fileprovider 作为授权标识,确保生成的 URI 能被系统蓝牙组件安全访问。

错误处理机制

  • 蓝牙不可用 → 提示并退出
  • 权限拒绝 → 引导用户手动开启
  • 文件复制失败 → 错误日志 + Toast 提示
  • 蓝牙启动失败 → 自动降级到系统分享选择器

📝 开源协议

MIT License — 自由使用,欢迎贡献代码


🙋 常见问题

Q: 为什么需要复制文件到缓存?
A: Android 10+ 限制了应用间直接访问外部文件,通过复制到应用私有缓存并生成 content:// URI,可以确保蓝牙组件有权限读取文件。

Q: 缓存文件什么时候删除?
A: 文件传输启动后 60 秒自动清理,避免占用存储空间。

Q: 支持哪些文件类型?
A: 理论上支持所有类型,包括 APK、图片、视频、文档等。MIME 类型会自动从原文件继承。


Bloodtooth — 让 Android 蓝牙分享回归简单

About

Fix the issue where the share interface on Android 10 and above does not have the Bluetooth option.修复安卓10即以上版本分享界面没有蓝牙选项的问题。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages