Android service 服务的应用之电话监听器以及短信监听器。首先建立一个项目工程文件,如下图所示:
首先在MainActivity.java文件启动电话和短信的界面,代码如下
package com.xunfang.wiretap;
import com.xunfang.observer.MyObserver;
import com.xunfang.services.PhoneService;
import android.support.v7.app.ActionBarActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//电话
setContentView(R.layout.activity_main);
Intent intent = new Intent(this,PhoneService.class);
startService(intent);
//短信
Uri uri = Uri.parse("conten://sms");
getContentResolver().registerContentObserver(uri, true, new MyObserver(this,new Handler()));
}
@Override
public void onBackPressed() {
}
}
然后进入电话管理服务界面PhoeService.java界面。代码如下
package com.xunfang.phoneservice;
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 {
// 管理电话
private TelephonyManager tm;
private MyListener listener;
// 创建一个收音机
private MediaRecorder mr;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
// 实例化
tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
// 监听电话的状态
listener = new MyListener();
// 注册监听者,监听电话的状态
tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
}
private 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 (mr != null) {
// 说明录音机停止录音了
mr.stop();
mr.release();
mr = null;
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK: // 摘机状态(通话状态)
System.out.println("通话状态");
// 1.创建一个收音机
mr = new MediaRecorder();
// 2.设置音源
mr.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); // ZET
// 3.设置录制音频的格式
mr.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
// 4设置音频的采样率
mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
// 5.设置录制的文件放置的位置
mr.setOutputFile("/mnt/sdcard/xxx.avi");
// 6.准备录制
try {
mr.prepare();
} catch( Exception e) {
e.printStackTrace();
}
// 7.开始录制
mr.start();