zoukankan      html  css  js  c++  java
  • Service之来电监听(失败的案例)

    Service:服务,可以理解成一个运行再后台没有界面的Activity,集成于Seriver,是四大组件之一

    Service的继承关系:Service-->ContextWrapper-->Context  (与activity一样,都继承与ContextWrapper);

    生命周期:Context.startSeriver() 方法开启服务:onCreate()-->onStartCommand()-->onDestory();

        第一次开启服务,服务会执行onCreate()-->onStartCommand();(开启之后再开启服务,不会执行onCreate()方法);

         Context.bindSeriver() 方法开启服务:onCreate()-->onBind()-->onUnbind()-->重载的方法返回true-->Rebind()-->onDestory();

    开启

       方式一:startService();

       方式二:bindService();

    停止:

      方式一:stopService();

      方式二:unBind();

    下面开始我们的来电监听:

    实现创建一个类继承与Seriver:

     1 public class MyService extends Service {
     2     //创建一个录音机的实例
     3     MediaRecorder recorder = null;
     4     //绑定服务
     5     @Nullable
     6     @Override
     7     public IBinder onBind(Intent intent) {
     8         return null;
     9     }
    10 
    11     //解绑服务
    12     @Override
    13     public void unbindService(ServiceConnection conn) {
    14         super.unbindService(conn);
    15     }
    16 
    17     //重新绑定服务
    18     @Override
    19     public void onRebind(Intent intent) {
    20         super.onRebind(intent);
    21     }
    22 
    23     //创建一个Service 第一次开启的时候
    24     @Override
    25     public void onCreate() {
    26         Log.i("wei","onCreate");
    27         TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
    28         tm.listen(new MyPhoneStateSeriverListener(),PhoneStateListener.LISTEN_CALL_STATE);
    29         super.onCreate();
    30 
    31     }
    32 
    33     @Override
    34     public int onStartCommand(Intent intent, int flags, int startId) {
    35         Log.i("wei","onStartCommand");
    36         return super.onStartCommand(intent, flags, startId);
    37     }
    38 
    39     @Override
    40     public void onDestroy() {
    41         super.onDestroy();
    42         Log.i("wei","onDestroy");
    43     }
    44     private class MyPhoneStateSeriverListener extends PhoneStateListener{
    45         @Override
    46         public void onCallStateChanged(int state, String incomingNumber) {
    47             switch (state){
    48                 case TelephonyManager.CALL_STATE_IDLE://空闲状态
    49                     if (recorder!=null){
    50                         recorder.stop();
    51                         recorder.reset();
    52                         recorder.release();
    53                     }
    54                     break;
    55                 case TelephonyManager.CALL_STATE_OFFHOOK://接听状态
    56                     recorder.start();//开始录音
    57                     break;
    58                 case TelephonyManager.CALL_STATE_RINGING://响铃状态
    59                     recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);//设置音频的来源  MIC只能录单方的,VOICE_CALL可以录双方的
    60                     recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置音频的输出格式
    61                     recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//设置音频的编码方式
    62                     recorder.setOutputFile("/mnt/sdcard/luyin.3gp");//设置录音文件的存储位置
    63                     try {
    64                         recorder.prepare();//准备录音
    65                     } catch (IOException e) {
    66                         e.printStackTrace();
    67                     }
    68                     break;
    69             }
    70             super.onCallStateChanged(state, incomingNumber);
    71         }
    72     }
    73 }

    Manifest.xml配置:

    1 <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    2     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    3     <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    报错,空指针异常。

       

    GitHub:https://github.com/godfunc
    博客园:http://www.cnblogs.com/godfunc
    Copyright ©2019 Godfunc
  • 相关阅读:
    MOS管基本构造和工作原理
    压控恒流源电路
    TI博客文章-4-20mA电流环路发送器入门
    node.js发http请求
    node.js之web开发 koa入门
    nodejs入门开发与常用模块
    node.js安装与入门使用
    node.js和前端js有什么区别
    php hash_hmac 与python hmac 区别
    redis命令使用
  • 原文地址:https://www.cnblogs.com/Godfunc/p/6036743.html
Copyright © 2011-2022 走看看