[android] 采用服务录制电话&服务的生命周期
根据上一节代码里,加入一个录音功能,上传到服务器,就能实现一个录制器
当手机处于通话状态时,开启录音机
获取MediaRecorder对象,通过new出来
调用MediaRecorder对象的setAudioSource()方法,设置音频源,
参数:MediaRecorder.AudioSource.MIC,参数是麦克风,默认只支持单向录音
调用MediaRecorder对象的setOutputFormat(),设置输出格式,
参数:MediaRecorder.OutputFormat.THREE_GPP
调用MediaRecorder对象的setAudoEncoder()方法,设置音频编码
参数:MediaRecorder.AudioEncoder.AMR_NB
调用MediaRecorder对象的setOutputFile(path)方法,设置文件保存路径
参数:”/sdcard/”+System.currentTimeMilis+”.3gp”
调用MediaRecorder对象的prepare()方法,准备
调用MediaRecorder对象的start()方法,开始
调用MediaRecorder对象的stop()方法,停止
调用MediaRecorder对象的reset()方法,重置
调用MediaRecorder对象的release()方法,释放对象
需要权限android.permission.RECORD_AUDIO
需要写文件android.permission.WRITE_EXTERNAL_STORGE
开启服务
获取Intent对象,new Intent(this,PhoneService.class),参数:上下文,字节码
调用startService(intent)方法,参数:Intent对象
关闭服务
获取Intent对象,new Intent(this,PhoneService.class),参数:上下文,字节码
调用stopService(intent)方法,参数:Intent对象
在应用管理器手工停止服务
服务放生命周期
onCreate() ==> onStartCommand() ==> onStart() ==> onDestory()
服务只会被执行一次,如果多次调用,会从onStartCommand()开始运行
MainActivity.java(主界面)
package com.tsh.listentel; import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); } // 开启服务
public void start(View v) {
Intent intent = new Intent(this, PhoneService.class);
startService(intent);
} // 关闭服务
public void stop(View v) {
Intent intent = new Intent(this, PhoneService.class);
stopService(intent);
}
}
PhoneService.java(监听服务)
package com.tsh.listentel; import java.io.IOException; import android.app.Service;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager; public class PhoneService extends Service { @Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
} // 服务创建
@Override
public void onCreate() {
super.onCreate();
System.out.println("服务创建");
TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); tm.listen(new MyPhoneStateListener(),
PhoneStateListener.LISTEN_CALL_STATE);
} // 内部类
private class MyPhoneStateListener extends PhoneStateListener {
private MediaRecorder recorder; @Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber); try {
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
System.out.println("空闲状态");
//关闭
if (recorder != null) {
recorder.stop();
recorder.reset();
recorder.release();
} break;
case TelephonyManager.CALL_STATE_RINGING:
System.out.println("响铃状态");
//准备
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile("/sdcard/"
+ System.currentTimeMillis() + ".3gp");
recorder.prepare();
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
System.out.println("通话状态");
//开录
if (recorder != null) {
recorder.start();
}
break;
default:
break;
}
} catch (Exception e) {
e.printStackTrace();
}
} } // 服务销毁
@Override
public void onDestroy() {
System.out.println("服务销毁");
super.onDestroy();
} }
[android] 采用服务录制电话&服务的生命周期的更多相关文章
- 17.(转) Android之四大基本组件介绍与生命周期
Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一:了解四大基本组件 Activity ...
- android拾遗——四大基本组件介绍与生命周期
Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一:了解四大基本组件 Activity ...
- Android中startService的使用及Service生命周期
Android中有两种主要方式使用Service,通过调用Context的startService方法或调用Context的bindService方法.本文仅仅探讨纯startService的使用.不 ...
- Android SDK上手指南:Activity与生命周期
Android SDK上手指南:Activity与生命周期 2013-12-26 15:26 核子可乐译 51CTO 字号:T | T Activity生命周期并不仅仅在用户运行应用程序之后才开始生效 ...
- Android 中Activity生命周期分析:Android中横竖屏切换时的生命周期过程
最近在面试Android,今天出了一个这样的题目,即如题: 我当时以为生命周期是这样的: onCreate --> onStart -- ---> onResume ---> onP ...
- java线程基础巩固---Thread中断Interrupt方法学习&采用优雅的方式结束线程生命周期
Interrupt学习: 在jdk中关于interrupt相关方法有三个,如下: 关于上面的疑问会在稍后进行阐述滴,下面看代码: 编译运行: 应该说是t线程为啥在被打断之后没有退出,还是在运行状态,这 ...
- Android编程: MVC模式、应用的生命周期
学习内容:Android的应用剖析.MVC模式.应用的生命周期 ====Android的应用剖析==== 一个Android应用程序会使用如下组件: Android Activities 界面 A ...
- Android应用常规开发技巧——善用组件生命周期
数据管理 对于仅仅读数据.一种经常使用的管理模式是在onCreate函数中进行数据的载入,直到组件的onDestory函数被调用时在进行释放. // 缓存仅仅读的数据 private Object r ...
- Android开发之Activity横竖屏切换生命周期重建问题
当进行横竖屏切换的时候Activity的生命周期会重建,从而导致Activity崩溃等问题,为了避免这一问题,需要在AndroidManifest.xml文件中设置: <activity and ...
随机推荐
- docker 2(local registry)
1.获取仓库镜像 ,sudo docker pull registry 2.sudo vim /etc/init/docker.conf 增加--insecure-registry IP:5000 3 ...
- [转]Comparing sFlow and NetFlow in a vSwitch
As virtualization shifts the network edge from top of rack switches to software virtual switches run ...
- iproute2学习笔记
一.替代arp, ifconfig, route等命令 显示网卡和IP地址 root@openstack:~# ip link list 1: lo: <LOOPBACK,UP,LOWER_UP ...
- python爬虫学习之爬取全国各省市县级城市邮政编码
实例需求:运用python语言在http://www.ip138.com/post/网站爬取全国各个省市县级城市的邮政编码,并且保存在excel文件中 实例环境:python3.7 requests库 ...
- 脑残式网络编程入门(三):HTTP协议必知必会的一些知识
本文原作者:“竹千代”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.前言 无论是即时通讯应用还是传统的信息系统,Http协议都是我们最常打交 ...
- 从零开始单排学设计模式「策略模式」黑铁 II
阅读本文大概需要 1.7 分钟. 本篇是设计模式系列的第三篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统.所以现在打算重写,加上距离现在也有一段时间了, ...
- Jdk_API——1.8和Jdk_API1.6下载分享
1.JDK API 1.6 链接:https://pan.baidu.com/s/1bZKfldtqjCOsaYaT1Q9RcQ 提取码:t9ad 2.JDK API 1.8 链接:https ...
- 神经网络架构PYTORCH-初相识(3W)
who? Python是基于Torch的一种使用Python作为开发语言的开源机器学习库.主要是应用领域是在自然语言的处理和图像的识别上.它主要的开发者是Facebook人工智能研究院(FAIR)团队 ...
- ALL_DB_LINKS
类型:View Owner:SYS 内容:记录了当前用户下可访问的所有的DB links 字段: OWNER : DB Link的owner DB_LINK : DB Link名称 USERNAME ...
- 【分布式事务】基于RocketMQ搭建生产级消息集群?
导读 目前很多互联网公司的系统都在朝着微服务化.分布式化系统的方向在演进,这带来了很多好处,也带来了一些棘手的问题,其中最棘手的莫过于数据一致性问题了.早期我们的软件功能都在一个进程中,数据的一致性可 ...