Android四大组件之Service(服务)实例详解

2019-12-10 19:30:59王冬梅

java代码:

@Override
public void onCreate() {
  //拿到电话服务
  TelephonyManager manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
  //电话的状态监听器
  manager.listen(new MyListener(), PhoneStateListener.LISTEN_CALL_STATE);
}
private final class MyListener extends PhoneStateListener {
  private String num;
  private MediaRecorder recorder;  //录音
  private File file;
  public void onCallStateChanged(int state, String incomingNumber) {
    switch (state) {
      //响铃状态
      case TelephonyManager.CALL_STATE_RINGING:
        //保存电话号
        num = incomingNumber;
        break;
      //接通电话状态
      case TelephonyManager.CALL_STATE_OFFHOOK:
        try {
          //设置文件保存位置
          file = new File(Environment.getExternalStorageDirectory(), num + "_" + System.currentTimeMillis() + ".3gp");
          //创建录音器
          recorder = new MediaRecorder();
          //设置音频的来源(麦克风)
          recorder.setAudioSource(AudioSource.MIC);
          //采取3gp格式保存
          recorder.setOutputFormat(OutputFormat.THREE_GPP);
          //设置编码器
          recorder.setAudioEncoder(AudioEncoder.AMR_NB);
          //输出文件路径
          recorder.setOutputFile(file.getAbsolutePath());
          //准备
          recorder.prepare();
          //录音
          recorder.start();
        } catch (Exception e) {
          e.printStackTrace();
        }
        break;
      //电话空闲状态
      case TelephonyManager.CALL_STATE_IDLE:
        //电话挂断后停止录音
        if (recorder != null) {
          recorder.stop();
          recorder.release();
        }
        break;
    }
  }
}

权限:

<!-- 读电话的状态权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 录音权限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- sdCard读的权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!-- sdCard写的权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 打开网络权限 -->
<uses-permission android:name="android.permission.INTERNET" />

绑定本地服务

绑定本地服务实际上就是activity和服务进行绑定,activity一般是和用户进行交互,而服务一般是进行后台的工作,如果activity中需要访问服务中的一些方法,进行交互,这就需要进行绑定。