zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    redis安装及简单命令
    struts2 第二天
    初学struts2-入门案列
    hibernate第二天
    hibernate入门
    同义词,索引,表分区
    表空间,序列
    orcale函数
    orcale错题分析
    orcale开篇
  • 原文地址:https://www.cnblogs.com/wwttsqt/p/6492368.html
Copyright © 2011-2022 走看看