You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行代码时提示getDefaultAdapter()方法不支持且toast显示异常

问题排查与解决方案

根因定位

getDefaultAdapter() 是Android蓝牙框架中BluetoothAdapter类的废弃方法,自Android 12(API等级31)开始官方已移除该方法的公开支持,直接调用会抛出方法不存在异常,这是你收到不支持提示的核心原因。Toast显示错误通常和上下文参数无效、线程调用不规范、TargetSdk版本适配问题相关。

排查步骤

  • 查看项目build.gradle配置,确认targetSdkVersion和compileSdkVersion是否≥31,确认是否触发高版本系统API适配要求
  • 检查getDefaultAdapter()调用位置,是否做了系统版本分支判断,未加判断直接调用废弃方法会在高版本设备上直接崩溃
  • 逐一排查Toast调用逻辑:
    • 确认传入的Context参数是否为有效上下文,禁止传入已销毁的Activity实例
    • 确认Toast是否在主线程调用,子线程直接调用Toast会出现无法显示或运行时异常
    • 若使用了自定义Toast布局,检查布局文件是否存在加载错误、资源ID不存在的问题

修复方案

1. 蓝牙方法不支持问题修复

首先在AndroidManifest.xml中适配高版本蓝牙权限,新增BLUETOOTH_CONNECT、BLUETOOTH_SCAN等运行时权限声明,再替换原有方法调用逻辑:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
    // Android 12及以上版本通过蓝牙服务获取适配器
    BluetoothManager bluetoothManager = getSystemService(BluetoothManager.class);
    BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();
} else {
    // 兼容Android 11及以下版本
    BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
}

注意:如果你的应用不需要兼容Android 11及以下版本,可直接保留高版本获取逻辑,不需要做分支判断

2. Toast显示异常修复

  • 优先使用Application上下文调用Toast,避免页面销毁导致上下文失效:
    Toast.makeText(getApplicationContext(), "提示内容", Toast.LENGTH_SHORT).show();
  • 所有Toast调用必须切换到主线程执行,子线程可通过Handler、runOnUiThread等方式切换线程后再调用
  • 禁止复用Toast实例,每次显示都调用makeText创建新实例,避免复用导致的内容不更新、显示异常问题

内容的提问来源于stack exchange,提问作者Auntor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:45:02