当前位置: 首页 > news >正文

可以做软件的网站有哪些功能中国新闻社待遇

可以做软件的网站有哪些功能,中国新闻社待遇,哪些网站可以做相册视频,网站建设推广关键词目录 一、引言 二、Service核心机制解析 1. Service的本质特性 2. 生命周期管理 3. 服务类型全景 三、Service实战开发 1. 启动式Service开发(lesson1) 2. 绑定式Service开发 四、电话监听器完整实现(lesson3) 1. 系统架…

目录

一、引言

二、Service核心机制解析

1. Service的本质特性

2. 生命周期管理

3. 服务类型全景

三、Service实战开发

1. 启动式Service开发(lesson1)

2. 绑定式Service开发

四、电话监听器完整实现(lesson3)

1. 系统架构设计

2. 核心实现要点

3. 必要权限声明

五、调试与优化技巧


一、引言

在Android应用开发中,后台服务(Service)是实现持续运行任务的核心组件。本文将结合电话监听器的开发案例,深入讲解Service的运作机制,并演示如何通过TelephonyManager实现电话状态监控。本教程适用于已掌握Android基础知识的开发者。

二、Service核心机制解析

1. Service的本质特性

  • 继承自Context的异步执行组件
  • 无用户界面,支持后台运行(最长存活时间)
  • 支持跨进程通信(AIDL)

2. 生命周期管理

启动方式启动方法终止方法关联性
启动式startService()stopService()/stopSelf()独立运行
绑定式bindService()unbindService()与组件共存

3. 服务类型全景

  • 运行位置
    • 本地服务(Local Service)
    • 远程服务(Remote Service)
  • 运行模式
    • 前台服务(必须显示Notification)
    • 后台服务
  • 通信能力
    • 不可通信型
    • 可通信型(通过Binder)

三、Service实战开发

1. 启动式Service开发(lesson1)

实现步骤

1.继承Service类并重写关键方法

public class InfoService extends Service {@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {// 后台任务逻辑return START_STICKY;}
}

2.在AndroidManifest.xml注册服务

<service android:name=".InfoService" />

3.通过Intent控制服务生命周期 

// 启动服务
Intent startIntent = new Intent(context, InfoService.class);
startService(startIntent);// 终止服务
Intent stopIntent = new Intent(context, InfoService.class);
stopService(stopIntent);

2. 绑定式Service开发

通信架构

[Activity] ↔ [ServiceConnection] ↔ [Binder] ↔ [Service]

核心实现

1.创建Binder子类

public class InfoBinder extends Binder {public int getCount() {return serviceCount;}
}

2. 实现ServiceConnection

private ServiceConnection conn = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {InfoBinder binder = (InfoBinder) service;int count = binder.getCount();}
};

四、电话监听器完整实现(lesson3)

1. 系统架构设计

[监听界面] → [PhoneService] → [TelephonyManager]↓[录音管理]

2. 核心实现要点

TelephonyManager配置

TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
tm.listen(new PhoneStateListener(){@Overridepublic void onCallStateChanged(int state, String number) {switch(state) {case CALL_STATE_RINGING: // 响铃处理break;case CALL_STATE_OFFHOOK:// 通话开始录音startRecording();break;case CALL_STATE_IDLE:// 挂断停止录音stopRecording();break;}}
}, LISTEN_CALL_STATE);

录音管理

MediaRecorder recorder = new MediaRecorder();
private void startRecording() {recorder.setAudioSource(MediaRecorder.AudioSource.MIC);recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);recorder.setOutputFile("/sdcard/call_record.3gp");recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);recorder.prepare();recorder.start();
}

3. 必要权限声明

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

五、调试与优化技巧

  1. ADB调试命令
adb shell ps | grep "system_server"
adb shell kill -9 [PID]

注意事项

  • 需动态申请运行时权限(API 23+)
  • 录音文件建议添加时间戳命名
  • 考虑不同Android版本的兼容性

 

http://www.dtcms.com/a/469176.html

相关文章:

  • 【鉴权架构】SpringBoot + Sa-Token + MyBatis + MySQL + Redis 实现用户鉴权、角色管理、权限管理
  • 三星S25Ultra/S24安卓16系统Oneui8成功获取完美root权限+LSP框架
  • ffmpeg 播放视频 暂停
  • 老题新解|大整数的因子
  • Eureka的自我保护机制
  • 探索颜色科学:从物理现象到数字再现
  • AirSim_SimJoyStick
  • 第五部分:VTK高级功能模块(第149章 Remote模块 - 远程模块类)
  • 道可云人工智能每日资讯|《政务领域人工智能大模型部署应用指引》发布
  • 自己做网站哪家好win10 wordpress安装教程视频
  • wordpress整体搬迁宁波seo深度优化平台有哪些
  • 4K Wallpaper mac v2.7.dmg 安装教程(Mac电脑详细安装步骤4K壁纸Mac下载安装)
  • Mac 软件出现「应用程序“xxx”不能打开」的解决办法
  • 东航集团客户网站是哪家公司建设4k高清视频素材网站
  • Compose 在Row、Column上使用focusRestorer修饰符失效原因
  • Sora 2:当AI视频“以假乱真”,内容创作进入新纪元,体验AI创作能力
  • 推荐一个浏览器代理插件(Tajang Proxy),支持Chrome和Edge
  • conda|如何通过命令行在mac上下载conda
  • VS Code 二次开发:跨平台图标定制全攻略
  • 关于微信小程序开发几点总结
  • 杭州建站价格邢台wap网站建设费用
  • kafka4使用记录
  • 2100AI智能生活
  • 网站开发交流群做网站线上线下价格混乱
  • AI:让驾驶体验个性化!
  • 由Nacos允许配置访问代理启发的Node前端部署路径转发探究
  • vue - JS 判断客户端是苹果 iOS 还是安卓 Android(封装好的方法直接调用)二种解决方案
  • 路由器如何判断数据转发目标
  • BEM命名规范
  • 12V-24V转3.2V-10V600mA恒流驱动芯片WT7018