Android13应用在后台录音无声音

news/2024/12/12 1:44:13/

最近在做项目,对讲应用放在后台,录音无声音,最后解决。

一 现象

对讲应用运行在后台,录音无效查看日志,AudioRecorder录音回调全是0;状态栏无通知,无申请通知权限。

二解决

看了现象应该能够猜测到解决方案了。让应用在后台运行不被挂起,需要申请通知权限,然后创建通知在状态栏显示,防止应用被挂起。

1 申请通知权限

AndroidManifest.xml中

    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
2 代码检查权限
private final ActivityResultLauncher<String> requestPermissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestPermission(),result -> {if (result == null || !result) {// 用户不允许权限,处理拒绝的情况ToastUtil.getInstance().show("请授予通知权限");} else {// 用户允许权限,处理接受的情况}});@RequiresApi(api = Build.VERSION_CODES.TIRAMISU)public void requestPermission() {if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {// 权限未被授予,向用户请求权限requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS);} else {// 权限已经被授予,可以执行操作}}
3 创建通知栏 ,在service中创建
@SuppressLint("NotificationPermission")private void showMessageNotification(String data) {Log.e(TAG, "showMessageNotification data: " + data);String type = data.substring(0, 2);String a = ConvertUtil.convertBigModel(data.substring(2, 10));//短信发送方号码String number = String.valueOf(Long.parseLong(a, 16));//联系人号码
//        String b = ConvertUtil.convertBigModel(data.substring(10, 18));
//        String number1 = String.valueOf(Long.parseLong(b, 16));String text = ConvertUtil.unicodeToString(data.substring(10));Log.e(TAG, "showMessageNotification: " + data);// 为该通知设置一个idint notifyID = 1;daoManager = DaoManager.getInstance(this);smsLists = daoManager.querySmsList();if (smsLists != null && smsLists.size() > 0) {SmsList sms = daoManager.querySms(smsLists.get(smsLists.size() - 1).getId());notifyID = (int) (sms.getId() + 1);}int current = SPUtil.getInt(this, Constant.CHANNEL_INDEX, Constant.CHANNEL_INDEX_DEFAULT);list = new SmsList(notifyID, System.currentTimeMillis(), current, type, number, text, false);daoManager.insertSmsList(list);//创建通知if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);// 通知渠道的idString id = "my_channel_dmr_message";int importance = NotificationManager.IMPORTANCE_DEFAULT;NotificationChannel mChannel = new NotificationChannel(id, number, importance);mChannel.setShowBadge(true);mChannel.setName(getString(R.string.message));mNotificationManager.createNotificationChannel(mChannel);//设置点击事件Intent clickIntent = new Intent(this, SmsActivity.class);clickIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);PendingIntent clearIntent = PendingIntent.getActivity(this, 0, clickIntent, PendingIntent.FLAG_IMMUTABLE);// 通知渠道的idString CHANNEL_ID = "my_channel_dmr_message";// Create a notification and set the notification channel.Notification notification = new Notification.Builder(this, CHANNEL_ID).setAutoCancel(true).setShowWhen(true).setContentIntent(clearIntent).setContentTitle(number).setContentText(text).setSmallIcon(R.drawable.icon_message).setChannelId(CHANNEL_ID).build();mNotificationManager.notify(notifyID, notification);}}
4 在AndroidManifest.xml中给service增加audioRecorder使用权限
 <serviceandroid:priority="1000"+  android:foregroundServiceType="microphone"android:name=".server.BoService" />

END~


http://www.ppmy.cn/news/1554366.html

相关文章

Open AI 推出 ChatGPT Pro

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

ensp实验-vrrp多网关配置

一、交换机与路由的配置区别 1. 角色定义交换机&#xff1a; Master 或 Backup: 交换机通常作为 Master 或 Backup 设备参与 VRRP&#xff0c;负责在主设备故障时接替其工作。路由器&#xff1a; Master 或 Backup: 路由器同样可以作为 Master 或 Backup 设备…

Paddle Inference部署推理(二十四)

二十四&#xff1a;Paddle Inference推理 &#xff08;C&#xff09;API详解 9. 启用内存优化 API定义如下&#xff1a; // 开启内存/显存复用&#xff0c;具体降低内存效果取决于模型结构 // 参数&#xff1a;None // 返回&#xff1a;None void EnableMemoryOptim();// 判…

现代C++16 pair

文章目录 1. **概述**2. **成员类型和成员对象**3. **构造函数**4. **成员函数**5. **非成员函数**5.1 **make_pair**5.2 **比较运算符**5.3 **std::swap**5.4 **std::get** 6. **辅助类**6.1 **std::tuple_size 和 std::tuple_element**6.2 **std::common_type 和 std::basic_…

书生浦语第四期L1G4000——InternLM + LlamaIndex RAG 实践

1.环境、模型准备 1.1 配置基础环境 安装python依赖包 pip install einops0.7.0 protobuf5.26.1 1.2 安装Llamaindex pip install llama-index0.11.20 pip install llama-index-llms-replicate0.3.0 pip install llama-index-llms-openai-like0.2.0 pip install llama-ind…

自回归模型(AR )

最近看到一些模型使用了自回归方法&#xff0c;这里就学习一下整理一下相关内容方便以后查阅。 自回归模型&#xff08;AR &#xff09; 自回归模型&#xff08;AR &#xff09;AR 模型的引入AR 模型的定义参数的估计方法模型阶数选择平稳性与因果性条件自相关与偏自相关函数优…

Java 中的方法重写

在 Java 中&#xff0c;方法重写&#xff08;Method Overriding&#xff09;是面向对象编程的一个重要概念&#xff0c;它指的是子类中存在一个与父类中相同名称、相同参数列表和相同返回类型的方法。方法重写使得子类可以提供特定的实现&#xff0c;从而覆盖&#xff08;或改变…

等保2.0数据库测评之SQL server数据库测评

一、SQL server数据库介绍 SQL server美国Microsoft公司推出的一种关系型数据库系统。SQL Server是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统。 本次安装环境为Windows10专业版操作系统&#xff0c;数据库版本为Microsoft SQL Server 2019 (…