首页 > 代码库 > service

service

startservice 方式开启服务 服务就会在后台长期运行 直到用户手工停止 或者调用StopService方法 服务才会被销毁

bindService 方式开启服务 当activity销毁的时候服务也销毁  不求同时生但求同时死

4.0以后。服务第一次启动必须有界面

电话窃听qi案例
  new Thread(){}.start();  服务有啥区别 股票应用   进程容易被杀死
  实现步骤 
  (1)先定义一个服务 服务用来监听电话状态 开启服务
  (2)在服务的oncreate方法里面实例化TelephoneManager类的实例  
  技术分享
  (3)注册一个电话监听 
   技术分享
    (4)定义一个电话监听的类 代码如下 
  1. //监听电话的状态
  2. private class MyPhoneStateListenrer extends PhoneStateListener{
  3. //当设备的状态发生改变的时候调用
  4. @Override
  5. public void onCallStateChanged(int state, String incomingNumber) {
  6. //[3]具体判断一下 电话是处于什么状态
  7. switch (state) {
  8. case TelephonyManager.CALL_STATE_IDLE: //空闲状态
  9. break;
  10. case TelephonyManager.CALL_STATE_OFFHOOK://接听状态
  11. System.out.println("开始录");
  12. break;
  13. case TelephonyManager.CALL_STATE_RINGING: //响铃状态
  14. System.out.println("我准备一个录音机出来 ");
  15. break;
  16. }
  17. super.onCallStateChanged(state, incomingNumber);
  18. }
  19. }
(5) 实现录音的功能 
  1. //[1]获取MediaRecorder类的实例
  2. recorder = new MediaRecorder();
  3. //[2]设置音频的来源
  4. recorder.setAudioSource(MediaRecorder.AudioSource.MIC); //zet
  5. //[3]设置音频的输出格式
  6. recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
  7. //[4]设置音频的编码方式
  8. recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
  9. //[5]保存的文件路径
  10. recorder.setOutputFile("/mnt/sdcard/luyin.3gp");
  11. //[5]准备录音
  12. try {
  13. recorder.prepare();
  14. } catch (IllegalStateException e) {
  15. e.printStackTrace();
  16. } catch (IOException e) {
  17. e.printStackTrace();
  18. }
 
 (6)记得加上相应的权限 
  1. <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
  2. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  3. <uses-permission android:name="android.permission.RECORD_AUDIO" />
  4. <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

 

在Android 3.1系统之后,静态广播默认会被后台回收掉的。因此,静态广播多数是不安全的,所以建议建立动态广播,并且与Service进行绑定,这样做有利于长时间的后台监听。在Activity中注册广播接收者建议在onResume()当中进行注册。在onDestroy()进行销毁。

使用服务注册特殊的广播接收者
   (1)创建我们要注册的广播接收者 
  1. public class ScreenReceiver extends BroadcastReceiver {
  2. @Override
  3. public void onReceive(Context context, Intent intent) {
  4. //获取广播事件的类型
  5. String action = intent.getAction();
  6. if ("android.intent.action.SCREEN_OFF".equals(action)) {
  7. System.out.println("说明屏幕锁屏了");
  8. }else if("android.intent.action.SCREEN_ON".equals(action)){
  9. System.out.println("说明屏幕解锁了");
  10. }
  11. }
  12. }
(2)创建一个服务 用来注册广播接收者  代码如下
  1. package com.itheima.registerbroadcast;
  2. import android.app.Service;
  3. import android.content.Intent;
  4. import android.content.IntentFilter;
  5. import android.os.IBinder;
  6. public class ScreenService extends Service {
  7. private ScreenReceiver receiver;
  8. @Override
  9. public IBinder onBind(Intent intent) {
  10. return null;
  11. }
  12. //当服务第一次启动的时候调用
  13. @Override
  14. public void onCreate() {
  15. //在这个方法里面注册广播接收者
  16. //[1]获取ScreenReceiver实例
  17. receiver = new ScreenReceiver();
  18. //[2]创建IntentFilter对象
  19. IntentFilter filter = new IntentFilter();
  20. //[3]添加注册的事件
  21. filter.addAction("android.intent.action.SCREEN_OFF");
  22. filter.addAction("android.intent.action.SCREEN_ON");
  23. //[4]通过代码的方式注册
  24. registerReceiver(receiver, filter);
  25. super.onCreate();
  26. }
  27. //当服务销毁的时候调用
  28. @Override
  29. public void onDestroy() {
  30. //当actvivity销毁的时候 取消注册广播接收者
  31. unregisterReceiver(receiver);
  32. super.onDestroy();
  33. }
  34. }
(3)一定要记得配置service

 

service