前言 :寫下此篇便于以后對這些api的復(fù)習(xí)败去。
其他代碼就不粘貼了就把主要的代碼粘貼下來
package com.example.administrator.styleandtheme;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.widget.Toast;
import java.io.IOException;
/**
* Created by Administrator on 2017/12/6.
* <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 接電話權(quán)限
* <uses-permission android:name="android.permission.RECORD_AUDIO"/> 錄音的權(quán)限
*/
public class DemoService extends Service {
private MediaRecorder recoder;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
//1獲取實(shí)例
TelephonyManager tm= (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
//2 注冊電話監(jiān)聽
/*參數(shù):
PhoneStateListener 類的對象 監(jiān)聽指定狀態(tài)發(fā)生改變的類
int event PhoneStateListener 內(nèi)部定義好的常量(此處選監(jiān)聽電話狀態(tài))
*/
tm.listen(new MyPhoneStateListener(),PhoneStateListener.LISTEN_CALL_STATE);
super.onCreate();
// 兩步就搞定了 接下來就在下面的監(jiān)聽類中實(shí)現(xiàn) 3
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
}
private class MyPhoneStateListener extends PhoneStateListener{
// 重寫方法 當(dāng)狀態(tài)發(fā)生改變時(shí)調(diào)用用
@Override
public void onCallStateChanged(int state, String incomingNumber) {
// 3 具體判斷電話狀態(tài)(電話狀態(tài)都是TelephonyManager內(nèi)部定義的常量)
switch (state){
case TelephonyManager.CALL_STATE_IDLE:// 空閑狀態(tài)(電話沒有來呢)
if (recoder!=null){
recoder.stop();
recoder.reset();
recoder.release();
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK:// 摘機(jī)(接聽狀態(tài))
// 開始錄音
Toast.makeText(DemoService.this, "開始錄音", Toast.LENGTH_SHORT).show();
recoder.start();
break;
case TelephonyManager.CALL_STATE_RINGING://電話的響鈴狀態(tài)
// 準(zhǔn)備錄音機(jī)
Toast.makeText(DemoService.this, "準(zhǔn)備錄音機(jī)", Toast.LENGTH_SHORT).show();
/* 錄音 使用:*/
// 1準(zhǔn)備實(shí)例;
recoder = new MediaRecorder();
// 2設(shè)置來源 (錄雙方通話 mic 為錄單方通話)
recoder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);// mic 為單方通話
// 3這只輸出的格式(Gpp 錄出來的為3gp)
recoder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//4 設(shè)置音頻的編碼方式(NB 的編碼方式 微信的按住說話就是這種編碼方式)
recoder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
//5 設(shè)置存放的路徑
recoder.setOutputFile("data/data/com.example.administrator.styleandtheme/luyin.3gp");
// 6 準(zhǔn)備錄音(開始錄音的邏輯寫在接聽電話的代碼中)
try {
recoder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
break;
}
super.onCallStateChanged(state, incomingNumber);
}
}
}