安卓四大组件的复习——窃听电话(四)
这一节我是用来复习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("服务被销毁了..."); } }
基本上上面一段代码就是监听手机和开始录音, 都是模板代码 照抄就可以了