您的位置:首页 > 移动开发 > Android开发

45.android服务service-电话录音机

2017-02-11 00:03 288 查看


电话的状态:


挂断电话

来电状态
接通电话状态

用到的函数:

TelephonyManager manager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);//获得电话管理器

manager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);//对呼叫状态进行监听

private PhoneStateListener listener = new PhoneStateListener(){

@Override

public void onCallStateChanged(int state, String incomingNumber) {//当状态改变时调用

super.onCallStateChanged(state, incomingNumber);

switch(state){

case TelephonyManager.CALL_STATE_RINGING://来电

//处理代码

break;

case TelephonyManager.CALL_STATE_IDLE://挂断电话

//处理代码

break;

case TelephonyManager.CALL_STATE_OFFHOOK://接通电话状态

//处理代码

break;

}

}
};

录音的核心代码

recorder = new MediaRecorder();

recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//设置输入流设备为麦克风

recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置输出格式

recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//设置编码方式

recorder.setOutputFile(filename); //设置输出文件

recorder.prepare();//准备

recorder.start();//开始录制

recorder.stop();//停止录制

recorder.release(); //释放资源

权限配置

<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"/>
清单文件配置
<service android:name="com.ldw.record.recorderService"></service>
activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动录音服务"
android:onClick="click"
/>

</RelativeLayout>
MainActivity.java

package com.ldw.record;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
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 click(View v){
Intent intent = new Intent(this, recorderService.class);
startService(intent);
}

}
recorderService.java

package com.ldw.record;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;

public class recorderService extends Service {
private MediaRecorder recorder;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}

//服务创建的额时候被调用
@Override
public void onCr
4000
eate(){
super.onCreate();
//获得电话管理器
TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
//对呼叫状态进行监听,第二个参数决定监听的内容
tm.listen(new MyListener(), PhoneStateListener.LISTEN_CALL_STATE);
}

class MyListener extends PhoneStateListener{
//一旦电话的状态改变次方法调用
@Override
public void onCallStateChanged(int state, String incomingNumber) {  //当状态改变时调用
super.onCallStateChanged(state, incomingNumber);
switch(state){
case TelephonyManager.CALL_STATE_IDLE:  //空闲
System.out.println("空闲");
if(recorder != null){
recorder.stop();
recorder.release();
recorder = null;
}
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/luyin.3gp");     //设置输出文件
try {
recorder.prepare();
} catch (Exception e) {
e.printStackTrace();
}
recorder.start();
break;
case TelephonyManager.CALL_STATE_OFFHOOK:   //接通电话状态
//开始录音
System.out.println("接通电话状态");
break;
}
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: