Android 7.0内去掉有关USB 耳机音频输入设备的对话框和Toast方法

2022-08-27 AndroidR 插入USB设备自动授权不弹出权限对话框 USB请求权限流程 USB请求权限流程1. 新建activity,获取UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE)2. 获取所以的USB设备HashMap map = usbManager.getDeviceList()3. 过滤别的USB设备,拿到自己USB的USBDevice类,然后请求US...Android系统插入USB设备时,系统会弹出询问权限的对话框,现在需要不弹对话框而直接授权。... 阅读详情

Android 7.0 本文章可以参考解决绕过android下apk使用usb设备权限查询相应问题,自动获取usb权限,主要是在Android 7.0系统上,当插入USB 耳机或者音频输入设备的时候,就会报出如下对话框和消息提示,在我们开发的时候很不爽,需要手动去点很麻烦,如下图所示:

提示消息即Toast,当插入USB耳机或者麦时就会弹出“USB音频输入设备接入”,当拔掉时就会弹出“切换之原始的默认通道”

这个问题需要修改系统源码其位置在Android 7.0

/android/device/softwinner/common/addons/framework/audio/java/AudioManagerPolicy.java

这AudioManagerPolicy.java就是就是相关的代码源文件,而在此之前还有个xml文件来说明那就是strings_custom.xml

其实这个位置的方法很简单只要在源码目录下使用命令:

grep 'USB音频输入设备接入' ./ -Rn

就能找到strings_custom.xml,其内容如下所示:

<resources xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <!-- support the mouse mode -->
    <string name="enter_key_mouse_mode">进入鼠标模式</string>
    <string name="exit_key_mouse_mode">退出鼠标模式</string>
    <string name="title_key_mouse_mode">鼠标模式</string>
    <string name="detail_key_mouse_mode">当前处于鼠标模式</string>

    <!-- add by chenjd, message for audio -->
    <string name="usb_audio_out_plug_in_title">"USB音频输出设备接入"</string>
    <string name="usb_audio_plug_in_message">"可在‘通用设置-高级设置-提示音和通知-音频输出模式‘选择输出通道"</string>
    <string name="usb_audio_plug_out_message">"切换至原始的默认通道"</string>
    <string name="usb_audio_out_plug_out_title">"USB音频输出设备拔出"</string>
    <string name="usb_audio_in_plug_in_title">"USB音频输入设备接入"</string>
    <string name="usb_audio_in_plug_out_title">"USB音频输入设备拔出"</string>
    <string name="headphone_plug_in_title">"耳机插入"</string>
    <string name="headphone_plug_out_title">"耳机拔出"</string>
    <string name="headphone_plug_in_message">"切换至耳机"</string>
    <string name="headphone_plug_out_message">"切换至原始的默认通道"</string>
    <string name="usb_output_title">"USB音频输出选择"</string>
    <string name="usb_output_message">"USB音频输出设备已接入,请选择是否切换到USB音频设备输出,\n在 %1$s 秒后自动切换到USB音频设备"</string>
    <string name="usb_yes">"是"</string>
    <string name="usb_no">"否"</string>
    <string name="ota_title">"升级提示"</string>
    <string name="ota_accept">"确定"</string>
    <string name="ota_reject">"取消"</string>
    <string name="ota_error_title">"错误提示"</string>
</resources>

看到没有所有字符串对应的变量都列举出来了,在根据对应的字符串变量,来搜索Java源码文件:

grep 'usb_audio_in_plug_in_title' ./ -Rn

这样就找到了AudioManagerPolicy.java,其他Android系统版本也可以用这个方法去做,下面来看这个源码怎么修改,其实很简单,看字面意思就能看懂,先去掉对话框

1.在代码的527行有段方法:private void chooseUsbAudioDeviceDialog(final ArrayList<String> usb_device)这个方法就是弹出的对话框,下面来分析以下这个对话框:

 private void chooseUsbAudioDeviceDialog(final ArrayList<String> usb_device)
    {
        String str = mCtx.getResources().getString(com.android.internal.R.string.usb_output_message);
//获取对话框的内容,也就是在上面那个xml内usb_output_message对应的:USB音频输出设备已接入,请选择是否切换到USB音频设备输出,\n在 %1$s 秒后自动切换到USB音频设备
        alertDialog = new AlertDialog.Builder(mCtx).//创建对话框
                setTitle(com.android.internal.R.string.usb_output_title).//设置对话框的标题为"USB音频输出选择"
                setMessage(String.format(str, Integer.toString(USB_TOAST_TIME))).
                setPositiveButton(com.android.internal.R.string.usb_yes, new DialogInterface.OnClickListener() {//设置当点击“是”按钮的监听时间
                     @Override
                     public void onClick(DialogInterface dialog, int which) {
                           // TODO Auto-generated method stub
                           mAudioManagerEx.setAudioDeviceActive(usb_device, AudioManagerEx.AUDIO_OUTPUT_ACTIVE);//设置为usb为音频输入设备
                     }
                }).
                setNegativeButton(com.android.internal.R.string.usb_no, new DialogInterface.OnClickListener() {/设置当点击“否”按钮的监听时间
                     @Override
                     public void onClick(DialogInterface dialog, int which) {
                           // TODO Auto-generated method stub
                           //Log.v(TAG, "setNegativeButton ");
                           String message = mCtx.getResources().getString(R.string.usb_audio_plug_in_message);
                           toastPlugInNotification(message, AUDIO_OUT_NOTIFY);
//点击“否”,弹出提示消息:"可在‘通用设置-高级设置-提示音和通知-音频输出模式‘选择输出通道"
                     }
                }).
                create();
        alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
        alertDialog.show();//喷出对话框
        new AsyncTask() {
            @Override
            protected Object doInBackground(Object... arg0) {
                int time = USB_TOAST_TIME;//设置10秒等待时间
                while(time >= 0 && alertDialog != null && alertDialog.isShowing()){
                    publishProgress(time);
                    try {
                        Thread.sleep(1000);
                    } catch(Exception e) {
                        // do nothing
                    }
                    time--;
                }
                return null;
            }
            @Override
            protected void onPostExecute(Object result) {//当超过10秒没有点击时触发
                super.onPostExecute(result);
                if (alertDialog != null && alertDialog.isShowing()) {
                    alertDialog.dismiss();
                    mAudioManagerEx.setAudioDeviceActive(usb_device, AudioManagerEx.AUDIO_OUTPUT_ACTIVE);//设置为USB 设备为输入设备,这个逻辑很关键,是默认的情况,当去掉对话框时这个陆机要保留
                    alertDialog = null;
                }
            }
            @Override
            protected void onProgressUpdate(Object... values) {
                super.onProgressUpdate(values);
                int time = (Integer)values[0];
                String str = mCtx.getResources().getString(com.android.internal.R.string.usb_output_message);
                if(alertDialog != null)
                    alertDialog.setMessage(String.format(str, Integer.toString(time)));
            }
       }.execute();
    }

根据上面的对话框的代码,我们知道,对话框是默认点击“是”按钮的因此,我们需要在代码中也要保持这个逻辑:

那么这个对话框方法调用的位置在方法handleExternalDevice内,这个代码看着很长,但很简单,我就不分析了,把主要的贴出来,在634行调用了这个方法因此只要注释掉并添加一行:

 //chooseUsbAudioDeviceDialog(audio_out);
mAudioManagerEx.setAudioDeviceActive(audio_out, AudioManagerEx.AUDIO_OUTPUT_ACTIVE);

添加的就是跳过对话框而直接设置usb音频设备为输入设备

2.去掉相关的提示信息

在上面去掉对话框是就已经去掉了 

<string name="usb_audio_plug_in_message">"可在‘通用设置-高级设置-提示音和通知-音频输出模式‘选择输出通道"</string>

对方法handleExternalDevice分析可知,每一个对应的消息都会调用方法 toastPlugInNotification和toastPlugOutNotification

这两个方法从字面意思就知道是:挂在消息通知和挂出消息通知,源码如下:

private void toastPlugOutNotification(String title,String mng, int id){

        NotificationManager notificationManager = (NotificationManager) mCtx
            .getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.cancel(id);
        handleToastMessage(mng);
    }

    private void toastPlugInNotification(String title, int id){
        Notification notification = new Notification(com.android.internal.R.drawable.stat_sys_data_usb,
                title,System.currentTimeMillis());
        String contentTitle = title;
        String contextText = title;
        notification.setLatestEventInfo(mCtx, contentTitle, contextText, null);

        notification.defaults &= ~Notification.DEFAULT_SOUND;
        notification.flags = Notification.FLAG_AUTO_CANCEL;

        NotificationManager notificationManager = (NotificationManager) mCtx
            .getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(id, notification);

        handleToastMessage(title);
    }

其实到这里解决消息通知的方法就有很多了,你可以在AudioManagerPolicy.java搜索这两个方法,只要调用了这两个方法,就统统注释了就可以了,但是我在此的 做法是去研究这段代码,这两个代码内都有方法handleToastMessage,而这个方法如下:

 private void handleToastMessage(String message){
        if(mHandler == null) return;
        Message mng = mHandler.obtainMessage();
        mng.obj = message;
        mHandler.sendMessage(mng);//发送消息
    }

然后去找mHandler如下:

private void toastMessage(String message){//产生Toast,并喷发出来
        Toast.makeText(mCtx, message, Toast.LENGTH_LONG).show();
    }
 private Handler mHandler = new Handler(){
        @Override
        public void handleMessage(Message msg){
            String message = (String)msg.obj;
            //toastMessage(message);//屏蔽这个Toast的喷发
        }
    };

因此我们就可以找到着个最内层的一句话,Toast.makeText(mCtx, message, Toast.LENGTH_LONG).show(); 屏蔽掉,所有的相关音频输入的消息通知都没有了

Android Mediatek 禁用 USB 权限请求和声音提示 & 解决USB HID设备不识别问题(附带USB调试过程) 修改主要在 Android 系统中修改了 USB 权限请求和声音提示的相关代码,使得在插入 USB 设备时,系统不再弹出权限请求对话框,并且不再播放声音提示。 阅读详情

相关推荐

Android usb audio设备如何录音(四)

简介:优快云博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!】🚀】🚀人生格言:人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.​更多原创,欢迎关注:Android系统攻城狮​​​​​​​​1.前言本篇目的:理解Android usb audio设备如何录音。

Android系统攻城狮 3581

RK3399平台开发中安卓系统去除USB权限弹窗

当我们在访问一个插入到Android系统的USB设备的时候往往是需要权限的,此时系统会弹出询问权限的对话框,而我们此时希望让它默认允许访问USB设备并且不希望用户看到这个对话框。

hnjzfwy的博客 959

Geant4学习一:写一个简单程序

1、 基本介绍

ccwwNUAA的博客 7699

Android 屏蔽USB通知,解决插拔usb设备刷新屏幕

安卓在插拔某些USB设备,如飞鼠,无线鼠标、键盘之类的设备,会发出通知,很多APP里面有注册了键盘监听,收到通知会重新执行生命周期,出现黑屏闪烁现象。去掉这个通知就可以了。

Jimmy的专栏 1617

如何使用superpowers

"这个 bug 帮我修一下" → 我会自动走 systematic-debugging → TDD → verify 流程。- "帮我添加一个登录功能" → 我会自动走 brainstorming → plan → TDD → verify 流程。只要任务有 1% 的可能性适用某个技能,我就会先调用它再行动。→ TDD(测试驱动开发)→ verification(验证)→ code review(代码审查)提出需求 → brainstorming(头脑风暴)→ writing-plans(编写计划)

xiaojingjianqiang的博客 612

Halcon 3D点云处理实战:从PLY文件读取到曲面匹配的完整流程(附避坑指南)

本文详细介绍了Halcon在3D点云处理中的完整流程,从PLY文件读取到曲面匹配,特别强调了3D算子的应用技巧和避坑指南。通过实战案例和参数优化建议,帮助开发者高效处理工业视觉检测中的复杂点云数据,提升匹配精度和性能。

weixin_42535720的博客 279

android usb 开发:如何跳过usb权限询问,解决绕过android下apk使用usb设备权限查询相应问题,自动获取usb权限...

很多android的应用在使用usb设备时,尤其是usb摄像头,前段时间编写了一个有关usb设备的apk,但是在使用时总是会跳出系统对话框,用户体验很差,如下图所示,所以一直想要解决这个问题,在网上说了很多办法,但是我的能力有限都没有走通,在同事的帮助下终于解决的这个问题,非常感谢他们无私的帮助,在此记录下来。 希望android设备中,自动获得操作usb设备的权限。不希望弹出对话框让用户点击,才...

weixin_39969448的博客 2232

从零到一:Mx_yolo本地训练与K210部署实战指南

本文详细介绍了从零开始进行Mx_yolo本地模型训练到K210部署的全流程实战指南。涵盖环境配置、数据准备、模型训练与调优、模型转换及K210部署等关键步骤,并提供了常见问题解决方案和性能优化技巧,帮助开发者高效完成AI模型在嵌入式设备的落地应用。

weixin_29081163的博客 252

SoundSwitch 快速上手指南:Windows 默认音频设备切换器的安装、热键与配置详解

SoundSwitch 是一款免费开源的 Windows 音频设备切换工具,通过全局热键即可在扬声器、耳机、麦克风等播放/录音设备之间即时切换。本指南以官方站点首页与完整配置文档为骨架,带你在一分钟内完成安装与首轮配置,并深入讲解播放/录音设备选择、默认热键、系统托盘操作、七类设置标签页、Profiles 与 App Rules 的取舍,以及 CLI 自动化方案。 ## 一分钟快速上手(Quic

gitblog_01086的博客 477

Google Earth Engine(GEE)——MOD09A1/MOD11A2/MOD13A1不同的QA波段去云进行分析

​​​​​​​大多数光学卫星图像产品都带有一个或多个 QA 波段,允许用户评估每个像素的质量并提取满足其要求的像素。QA 波段最常见的应用是提取有关多云像素的信息并对其进行屏蔽。但是 QA 波段包含大量其他信息,可以帮助您从分析中删除低质量数据。通常,QA 频带中包含的信息存储为按位标志。在这篇文章中,我将介绍与位运算相关的基本概念,以及如何使用位掩码提取和屏蔽特定的质量指标。

此星光明博客 4576

微信小程序 - 接入腾讯地图 SDK 及详细使用教程,结合小程序 mpa 地图组件展示腾讯地图(基础使用 / 授权当前位置 / 配合小程序map组件的使用 / 腾讯地图逆地址解析 / 坐标系的转化)

微信小程序使用腾讯地图完整流程,微信小程序 接入腾讯地图,如何在微信小程序中接入腾讯地图,微信小程序引入腾讯地图API方法,腾讯地图小程序SDK,微信小程序实现使用腾讯地图SDK步骤详细介绍,微信小程序接入腾讯地图(线路规划、逆解析)、高德地图,微信小程序之使用腾讯地图,微信小程序 接入第三方地图,小程序服务器配置地图,微信小程序接入腾讯地图,微信小程序插入腾讯地图教程,微信小程序如何调用腾讯地图,如何在微信小程序中接入腾讯地图,微信小程序腾讯地图SDK使用方法,在微信小程序上创建一个简单的腾讯地图,微信小

✅ 精选推荐文章 1万+

Android AudioFlinger驱动调试日志全解析

AudioFlinger(AF)是Android音频系统的核心服务,负责音频流调度、混音、设备路由与HAL交互。其日志并非普通应用日志,而是融合了用户态服务逻辑、实时buffer状态、硬件抽象层(HAL)反馈及音频策略决策的复合型系统日志。理解AF日志需掌握其分层设计原理:上承App音频请求(Track生命周期、Session ID、PID/TID),中控Policy路由与资源抢占,下接HAL设备打开/写入/错误码(如ENODEV、ETIMEDOUT)。技术价值在于实现‘可定位、可复现、可归因’的深度问题诊

weixin_34326179的博客 465

10|Git Diff 与增量代码识别:本次到底改了哪些代码?

本文介绍 Git Diff 和增量代码识别,帮助你理解精准测试如何先找到本次真正变化的代码。测试开发工程师。Java 后端开发工程师。质量平台 / DevOps 平台建设者。想了解精准测试落地方法的技术负责人。

专注 AI 精准测试平台实战落地,分享从代码 Diff 到回归决策的完整工程闭环。主张“先建数据链路,再上 AI 智能”,让测试从“靠经验”走向“基于风险”。 162

Unity AR项目Android真机语音合成失效:RT-Voice与Google TTS配置指南

语音合成(TTS)技术是实现人机语音交互的核心,其原理是将文本信息通过算法转换为自然语音流。在移动应用开发中,TTS为无障碍服务、语音助手、教育娱乐等场景提供了关键技术支持,显著提升了应用的可访问性与沉浸感。然而,Android平台的碎片化特性导致不同设备的TTS引擎支持存在差异,这直接影响语音合成功能的稳定性与兼容性。特别是在Unity引擎开发的AR/VR应用中,依赖实时语音合成的功能(如动态旁白、角色对话)常因设备默认TTS引擎缺失或配置不当而失效。本文聚焦于通过集成Google TTS引擎与优化初始化

weixin_34297704的博客 448

6-Halcon-- var_threshold 函数功能(用于基于局部统计特性的动态阈值分割的算子)

var_threshold 是 HALCON 中用于基于局部统计特性的动态阈值分割的算子,特别适用于处理低对比度图像或纹理均匀但包含细微差异的场景。与 dyn_threshold 不同,它不依赖预处理生成的参考图像,而是直接在局部区域内计算灰度值的统计特性(均值和标准差),从而自适应调整阈值。

weixin_45590420的博客 1329

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

基于BLE与Android的智能安全设备开发:从Puck.js到紧急求助系统

蓝牙低功耗(BLE)技术作为物联网设备通信的核心协议之一,以其极致的功耗控制和快速连接特性,成为可穿戴设备、智能家居等场景的首选方案。其工作原理基于服务与特征值模型,通过订阅通知实现设备与移动端的高效、低功耗数据交换。在工程实践中,BLE技术能够支撑起长时间待机、快速响应的应用需求,尤其适用于对功耗和实时性有严格要求的场景。结合Android平台的背景服务与权限管理机制,可以构建稳定可靠的后台监听应用。本文以个人安全设备“Talos”为例,详细解析了如何利用Puck.js硬件模块与Android前台服务,实

weixin_30417487的博客 630

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

OpenHarmony可穿戴AI开发:终端智能范式迁移实践

可穿戴AI不是简单移植模型,而是面向资源严苛终端的系统级智能重构。其核心在于理解边缘设备的物理约束(如RAM不足128KB、ADC采样率波动、毫瓦级功耗),并基于此重新设计感知-决策-执行闭环。开源鸿蒙凭借分布式软总线与统一元能力,突破单设备算力与传感器瓶颈,实现跨端数据协同与AI能力复用;而轻量级时序模型(如TCN、GRU)与硬件感知的管道化部署(如事件驱动推理、混合精度量化、传感器-模型语义对齐),则保障低延迟、高鲁棒性与长续航。本文聚焦OpenHarmony平台在Hi3861等四款主流芯片上的实证路径

weixin_34347651的博客 451

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

程序员AI语音输入法:从语音到可执行语义的工作流重构

语音输入法作为人机交互基础技术,其核心价值在于突破‘思考-表达’带宽瓶颈;传统方案因缺乏领域适配与上下文感知,在程序员场景中普遍失效。AI增强型语音输入通过动态注入技术术语词典、IDE上下文理解、意图驱动语义解析,将原始语音转化为结构化文档、可运行代码片段与协作就绪交付物,显著降低文档负债、需求失真与认知切换损耗。该技术已深度融入PR描述、会议纪要、知识库沉淀等典型工程场景,成为提升软件开发信息转化效率的关键基础设施。

weixin_34205826的博客 220

华为Mate 80开发者指南:鸿蒙原生应用开发与异构计算实战

移动应用开发正经历从传统架构向端侧智能与异构计算融合的范式转变。其核心原理在于将AI模型、图形渲染等计算密集型任务从云端下沉至设备端,通过专用硬件(如NPU、GPU)实现高效、低延迟处理,从而提升用户体验并保障数据隐私。这一技术演进为开发者带来了显著价值:能够构建响应更迅捷、功能更强大的原生应用,并催生了实时AI处理、离线智能交互等新场景。以华为HarmonyOS NEXT及其配套芯片平台为例,开发者可利用ArkTS声明式框架和MindSpore Lite等工具链,将轻量化模型部署至端侧,实现图像分类、语音

weixin_34318272的博客 366

RK3399 Android10 移除应用权限(包含USB)申请弹框

修改framework,指定的app不需要弹框申请权限

dfqin的专栏 1536

Android 7.0系统权限问题

Android 7.0系统在运行应用的时候,对权限做了诸多限制,normal, dangerous, signature, signatureOrSystem ,取决于保护级别,在确定是否授予权限时,系统可能采取不同的操作。 normal 表示权限是低风险的,不会对系统、用户或其他应用程序造成危害; dangerous 表示权限是高风险的,系统将可能要求用户输入相关信息,才会授予此权限; sign...

lancelots的博客 5342

android 7.0 禁止系统弹出USB 设备权限提示框

当我们在访问一个插入到Android系统的USB设备的时候往往是需要权限的,此时系统会弹出询问权限的对话框,而我们此时希望让它默认允许访问USB设备并且不希望用户看到这个对话框。 我们在获取UsbManager和UsbDevice/UsbAcessory之后,首先需要检查是否对这个USB设备/附件有操作的权限,如果没有权限,则需要向系统申请(系统会弹出询问权限的对话框),此时需要注册一个广播接收...

hefuyou的博客 9767

Android开发——强制取消Toast

在日常的Android开发当中,我肯定少不了Toast提示用户。我维护一个运营了上线6年的项目的时候,我们网络请求的异常状态窗口要Dialog显示,但是之前的前辈把Toast写网络请求的底层了,如果我们要改动底层网络请求框架代价太大了。我就想着能不能在直接关闭Tosat,看Toast源码的时候,我发现了cancel()方法。 关闭Toast的代码 在项目的ToastUtil类中加入下面方法。 pu...

裕博的博客 2691

rk3568 android11 去掉耳机检测功能

在调试rk3568主板时发现一开机状态栏就出现耳机符号,样品阶段不想出现这个耳机符号 diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dtsi b/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dtsi old mode 100644 new mode 100755 index d4035a3..2628087 --- a/arch/arm64/boot/dts/rockc

Haidern 学习共享 1668

[高通平台]手机提示模拟耳机插入,不支持此设备

/LA.UM.8.15/vendor/qcom/opensource/usb/hal/Usb.cpp 428 Status getPortStatusHelper(hidl_vec<PortStatus_1_1> *currentPortStatus_1_1, ….. 486 if (V1_0) { 487 (*currentPortStatus_1_1)[i].status.supportedModes = V1_0::PortMode::DFP; 488 } else { - (

thonmin的专栏 6016

Android接入USB音频设备,系统一直发送广播

在onReceive()方法中,检查广播的类型并获取连接或断开连接的设备。然后,可以检查设备是否是我们要处理的音频设备,并执行相应的操作。当USB音频设备(如麦克风)连接到Android设备时,系统可能会发送广播来通知应用程序有新的音频设备已连接或已断开连接。要解决这个问题,可以使用BroadcastReceiver类注册接收系统发送的USB音频设备连接或断开连接的广播。今天发现有一款USB音频设备接入Android后,系统一直发送广播,导致出现了一些异常情况,下面是预想中的一种方案,在此记录一下。

sinat_32010083的博客 942
上一篇: NIO的代码实现与分析
下一篇: Netty学习和代码模板详解
葫芦娃二娃
博客等级 码龄15年 1850粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值