根据上一节代码里,加入一个录音功能,上传到服务器,就能实现一个录制器

当手机处于通话状态时,开启录音机

获取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] 采用服务录制电话&服务的生命周期的更多相关文章

  1. 17.(转) Android之四大基本组件介绍与生命周期

    Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一:了解四大基本组件 Activity ...

  2. android拾遗——四大基本组件介绍与生命周期

    Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一:了解四大基本组件 Activity ...

  3. Android中startService的使用及Service生命周期

    Android中有两种主要方式使用Service,通过调用Context的startService方法或调用Context的bindService方法.本文仅仅探讨纯startService的使用.不 ...

  4. Android SDK上手指南:Activity与生命周期

    Android SDK上手指南:Activity与生命周期 2013-12-26 15:26 核子可乐译 51CTO 字号:T | T Activity生命周期并不仅仅在用户运行应用程序之后才开始生效 ...

  5. Android 中Activity生命周期分析:Android中横竖屏切换时的生命周期过程

    最近在面试Android,今天出了一个这样的题目,即如题: 我当时以为生命周期是这样的: onCreate --> onStart -- ---> onResume ---> onP ...

  6. java线程基础巩固---Thread中断Interrupt方法学习&采用优雅的方式结束线程生命周期

    Interrupt学习: 在jdk中关于interrupt相关方法有三个,如下: 关于上面的疑问会在稍后进行阐述滴,下面看代码: 编译运行: 应该说是t线程为啥在被打断之后没有退出,还是在运行状态,这 ...

  7. Android编程: MVC模式、应用的生命周期

    学习内容:Android的应用剖析.MVC模式.应用的生命周期 ====Android的应用剖析==== 一个Android应用程序会使用如下组件: Android Activities   界面 A ...

  8. Android应用常规开发技巧——善用组件生命周期

    数据管理 对于仅仅读数据.一种经常使用的管理模式是在onCreate函数中进行数据的载入,直到组件的onDestory函数被调用时在进行释放. // 缓存仅仅读的数据 private Object r ...

  9. Android开发之Activity横竖屏切换生命周期重建问题

    当进行横竖屏切换的时候Activity的生命周期会重建,从而导致Activity崩溃等问题,为了避免这一问题,需要在AndroidManifest.xml文件中设置: <activity and ...

随机推荐

  1. Python小练习之判断一个日期是一年的第几天

    python练手遇到的一个问题写了个统一公式,不用麻烦的分各种类,如果有人测试出错误请评论通知. #分单双月 def dayNum(month,day,isLeap): if month % 2 != ...

  2. Java-异常初步练习

    案例一: package com.esandinfo; /** * 自定义一个Exception类 */ class MyCustomException extends RuntimeExceptio ...

  3. PHP中 PCRE正则表达式模式修饰符“u” 的使用。

    u (PCRE_UTF8) 此修正符打开一个与 perl 不兼容的附加功能. 模式字符串被认为是utf-8的. 这个修饰符 从 unix 版php 4.1.0 或更高,win32版 php 4.2.3 ...

  4. 数值计算 的bug:(理论)数学上等价,实际运行未必等价

    1. 计算表达式的值(lambda 表达式) fun1 和 fun2 理论上是等价的:同样的输入情形下,两种输出结果不一致. # fun1 定义 fun1=lambda x:sqrt(x+1)-sqr ...

  5. KVM虚拟化概述与安装

    虚拟化是构建云计算基础架构不可或缺的关键技术之一,云计算的云端系统,其实质上就是一个大型的KVM分布式系统,虚拟化通过在一个物理平台上虚拟出更多的虚拟平台,而其中的每一个虚拟平台则可以作为独立的终端加 ...

  6. 微信自用高性能通用key-value组件MMKV已开源!

    1.MMKV简介 腾讯微信团队于2018年9月底宣布开源 MMKV ,这是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,主打高性能和稳定性.近 ...

  7. 使用MagicOnion实现gRPC

    1.什么是gRPC 官方文档:https://grpc.io/docs/guides/index.html 2.什么是MagicOnion MagicOnion开源地址:https://github. ...

  8. 第80节:Java中的MVC设计模式

    第80节:Java中的MVC设计模式 前言 了解java中的mvc模式.复习以及回顾! 事务,设置自动连接提交关闭. setAutoCommit(false); conn.commit(); conn ...

  9. kafka扫盲笔记,实战入门

    Kafka作为大数据时代的产物,自有其生存之道.让我们跟随扫盲班的培训,进行大致了解与使用kafka吧.(平时工作有使用不代表就知道kafka了哟) 1. kafka介绍 1.1. 拥有的能力(能干什 ...

  10. SpringBoot+logback实现日志打印

    logback介绍 logback是一款开源的日志框架,内核重写了,是基于log4j基础进行改良的.其官网为logback.qos.ch.logback在性能上有很大提升,拥有更多特性. logbac ...