电话录音机demo
开机自动启动录音服务,电话摘机的时候开始录音。
RecorderService.java
package com.example.testservice;
import android.app.Service;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;
public class RecorderService extends Service {
private MediaRecorder recorder;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
/**
* 在服务创建的时候设置电话监听器
*/
@Override
public void onCreate() {
super.onCreate();
TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
tm.listen(new MyPhoneStateListener(),
PhoneStateListener.LISTEN_CALL_STATE);
Toast.makeText(RecorderService.this, "电话监听器服务被创建", 0).show();
Log.d("ziru", "电话监听器服务被创建");
}
class MyPhoneStateListener extends PhoneStateListener {
// 监听电话的状态改变
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:// 电话空闲
// 释放占用的录音机资源
if (recorder != null) {
recorder.stop();
recorder.release();
recorder = null;
Toast.makeText(RecorderService.this, "释放占用的录音机资源", 0)
.show();
Log.d("ziru", "释放占用的录音机资源");
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK:// 电话摘机
// 启动录音机开始录音
if (recorder != null) {
recorder.start();
Toast.makeText(RecorderService.this, "启动录音机开始录音", 0).show();
Log.d("ziru", "启动录音机开始录音");
}
break;
case TelephonyManager.CALL_STATE_RINGING:// 电话响铃
// 创建录音机,准备录音
if (recorder == null) {
recorder = new MediaRecorder();
// 1 设置声音来源
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
// 2 设置音频文件格式
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setOutputFile("sdcard/voice.3gp");
// 3 设置音频文件编码
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
Toast.makeText(RecorderService.this, "创建录音机,准备录音", 0)
.show();
Log.d("ziru", "创建录音机,准备录音");
try {
recorder.prepare();
} catch (Exception e) {
e.printStackTrace();
}
}
break;
default:
break;
}
}
}
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(this, "电话监听器服务被销毁", 0).show();
Log.d("ziru", "电话监听器服务被销毁");
}
}
main_layout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/btn_startRecoder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="创建服务" />
<Button
android:id="@+id/btn_stopRecoder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="销毁服务" />
</LinearLayout>
MainActivity.java
package com.example.testservice;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity implements OnClickListener {
private Button btnStartRecoder;
private Button btnStopRecoder;
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
btnStartRecoder = (Button) findViewById(R.id.btn_startRecoder);
btnStopRecoder = (Button) findViewById(R.id.btn_stopRecoder);
btnStartRecoder.setOnClickListener(this);
btnStopRecoder.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_startRecoder:
intent = new Intent(this, RecorderService.class);
startService(intent);
break;
case R.id.btn_stopRecoder:
stopService(intent);
break;
default:
break;
}
}
}
BootReceiver.java
package com.example.testservice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 接收到开机广播的时候, 启动电话监听器服务
Intent intent2 = new Intent(context, RecorderService.class);
context.startService(intent2);
}
}
AndroidManifest.xml
<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" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
......
<service android:name="com.example.testservice.RecorderService" />
<receiver android:name="com.example.testservice.BootReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>