该服务的作用是当打电话时自动录音。

布局文件


布局文件中开启录音服务

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/start"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="18sp"android:text="开始录音"android:onClick="click"/>
</LinearLayout>

Activity


设置监听器,启动一个服务

package xidian.dy.com.chujia;import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {Intent service;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);}public void click(View v){Toast.makeText(this,"开启服务",Toast.LENGTH_SHORT).show();service = new Intent(this, MyService.class);startService(service);}}

服务


在服务中定义内部类来监听电话状态

package xidian.dy.com.chujia;import android.app.Service;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.Environment;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;import java.io.IOException;/*** Created by dy on 2016/7/12.*/
public class MyService extends Service {TelephonyManager tm;@Overridepublic void onCreate() {super.onCreate();//获取电话管理器tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);//对感兴趣的事件进行监听,传入回调函数tm.listen(new MyListener(),PhoneStateListener.LISTEN_CALL_STATE);}class MyListener extends PhoneStateListener{MediaRecorder mRecorder;//一旦电话状态改变该方法被调用
        @Overridepublic void onCallStateChanged(int state, String incomingNumber) {super.onCallStateChanged(state, incomingNumber);switch (state){//电话处于空闲状态停止录音case TelephonyManager.CALL_STATE_IDLE:if(mRecorder != null){mRecorder.stop();mRecorder.release();mRecorder = null;}break;//电话处于响铃状态case TelephonyManager.CALL_STATE_RINGING:mRecorder = new MediaRecorder();mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);mRecorder.setOutputFile(Environment.getExternalStorageDirectory().toString() + "/record.3gp");mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);try {mRecorder.prepare();} catch (IOException e) {Log.e(this.getClass().getName(), "prepare() failed");}break;//电话处于摘机状态case TelephonyManager.CALL_STATE_OFFHOOK:if(mRecorder != null){mRecorder.start();}break;}}}@Nullable@Overridepublic IBinder onBind(Intent intent) {return null;}
}

清单文件


在清单文件中需要获取相应的权限并注册服务

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="xidian.dy.com.chujia"><uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.RECORD_AUDIO" /><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme"><activityandroid:name=".MainActivity"android:label="主界面"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><service android:name=".MyService" />
</application>
</manifest>

转载于:https://www.cnblogs.com/xidongyu/p/5665245.html

android服务之录音功能相关推荐

  1. android从服务端获取json解析显示在客户端上面,Android服务端获取json解析显示在客户端上面.doc...

    Android服务端获取json解析显示在客户端上面 Android从服务端获取json解析显示在客户端上面 首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比 ...

  2. erlang-百度云推送Android服务端功能实现-erlang

    百度云推送官方地址http://developer.baidu.com/wiki/index.php?title=docs/cplat/push 简单的介绍下原理: 百度云推送支持IOS和Androi ...

  3. Android服务一 创建启动服务

    若要学习创建绑定服务,请查看下篇Android服务二 创建绑定服务 启动服务 基于Service package service;import android.app.Service; import ...

  4. Qt创建Android服务

    Qt创建Android服务 创建Android服务 创建Android服务 从Qt 5.7开始,您可以使用Qt创建Android服务.服务是在后台运行的组件,因此它没有用户界面.执行长期操作(例如记录 ...

  5. Android 服务入门

    前言:硬着头皮把数据库SQLite看完了,接下来就是android服务了,因为自己本身就是菜鸟,所以呢,也只是做做笔记,技术上的东西就别指望我了. 1.什么是服务呢?举个例子,百度地图,美团外卖,OF ...

  6. android.os.binderproxy cannot be cast to,Android服务android.os.BinderProxy错误

    我一直在尝试使此android服务正常工作,但我不知道为什么会收到此错误. 05-13 12:13:36.203: ERROR/dalvikvm(7782): could not disable co ...

  7. android 服务自动结束,Android服务自动停止

    我正在制作一个带有闹钟功能的应用程序.我正在使用这种服务,不断检查设备的当前时间与我的数据库中的时间.Android服务自动停止 我的问题是,如果应用程序从后台删除或设备是rebooted,此serv ...

  8. Android服务函数远程调用源码分析

    在Android服务查询完整过程源码分析中介绍了客户进程向ServiceManager进程查询服务的完整过程,ServiceManager进程根据服务名称在自身维护的服务链表中查找ServiceMan ...

  9. Android服务查询完整过程源码分析

    Android服务注册完整过程源码分析中从上到下详细分析了Android系统的服务注册过程,本文同样针对AudioService服务来介绍Android服务的查询过程. 客户端进程数据发送过程 pri ...

最新文章

  1. 上传图片,多图上传,预览功能,js原生无依赖
  2. python游戏代码五子棋_用20行Python代码实现2048小游戏,你会吗?
  3. JAVA 和.NET在安全功能的比较
  4. 使用Javaweb实现在线调查问卷系统
  5. 手动安装sys驱动文件_海龙工具的正确安装及卸载方法,自己动手丰衣足食
  6. python之sys模块详解
  7. java微信内h5调起支付_java微信支付--------公众号内H5调起支付
  8. spring教程笔记5
  9. 怎么在页面关闭时执行代码
  10. 黑群晖二合一安装不了套件_黑群晖刷机教程
  11. LVGL v8.1.0 lv_table 内存泄漏问题
  12. 谷歌浏览器屏蔽百度热点搜索
  13. Linux 使用系统调用进行文件读写
  14. 程序员如何营销自己?
  15. 什么是云监控,云监控工具
  16. 清明2013——祭父
  17. 微型计算机指的是重量轻,计算机与信息技术概述(答案)
  18. DMIPS, TOPS, FLOPS, FLOPs, GMACs, FMA
  19. esp32例子初始化流程
  20. 2019年测试行业展望

热门文章

  1. linux python2.7安装教程_Linux中RedHat下安装Python2.7开发环境的详细教程-学派吧-
  2. 用tf的VocabularyProcessor使用细节
  3. 高基数特征的预处理方式
  4. 最大间隔分类器的错误理解
  5. 地图处理(dfs算法)
  6. Leetcode69场双周赛-第二题5961.链表最大孪生和
  7. tampermonkey参数
  8. 【企业管理】价值创造的两个轮子
  9. 2021下信息系统项目管理师真题及答案解析
  10. 笔记-信息化与系统集成技术-智慧城市建设参考模型