Android初級教程實現電話錄音

來源:互聯網
上載者:User

標籤:

需求:設定來電後自動錄音。

首先設定一個按鈕,代碼很簡單這裡就不再給出。

建一個類,RecorderServicer extends Service

package com.ydl.recorder;import java.io.IOException;import android.app.Service;import android.content.Intent;import android.media.MediaRecorder;import android.os.IBinder;import android.telecom.TelecomManager;import android.telephony.PhoneStateListener;import android.telephony.TelephonyManager;public class RecorderServicer extends Service {private MediaRecorder recorder;@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {super.onCreate();TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);//監聽電話狀態tm.listen(new MyListener(), PhoneStateListener.LISTEN_CALL_STATE);}class MyListener extends PhoneStateListener {@Overridepublic void onCallStateChanged(int state, String incomingNumber) {// TODO Auto-generated method stubsuper.onCallStateChanged(state, incomingNumber);switch (state) {case TelephonyManager.CALL_STATE_IDLE:System.out.println("空閑");if (recorder != null) {recorder.stop();// 停止錄音recorder.release();recorder = null;}break;case TelephonyManager.CALL_STATE_RINGING:System.out.println("響鈴");// 進行初始化if (recorder != null) {recorder = new MediaRecorder();recorder.setAudioSource(MediaRecorder.AudioSource.MIC);// Microphone// audio// sourcerecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);// 設定輸出3gp格式recorder.setOutputFile("sdcard/luyin.3gp");recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);// 設定音頻編碼格式try {recorder.prepare();// 做好準備} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}break;case TelephonyManager.CALL_STATE_OFFHOOK:System.out.println("摘機");// 開始錄音if (recorder != null) {recorder.start();}default:break;}}}}

在主活動介面設定按鈕點擊事件:用於啟動上述服務

package com.ydl.recorder;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.view.View;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    public void click(View v){    Intent intent = new Intent(this, RecorderServicer.class);    startService(intent);        }}
為了做的更逼真一些,設定開機啟動服務:因此用到了上一章的開機廣播機制

建立一個類:BootReceiver extends BroadcastReceiver   用於開機啟動服務。因為服務是在背景,不可見面,因此不必設定任務棧即不需要addFlags()方法

package com.ydl.recorder;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;public class BootReceiver extends BroadcastReceiver {//設定開機啟動服務@Overridepublic void onReceive(Context context, Intent intent) {Intent it = new Intent(context, RecorderServicer.class);context.startService(it);}}

上述代碼都是對系統進行操作,例如:監聽電話狀態、設定開機廣播、寫出資料到SDcard、設定錄音方式。因此需要配置許可權,同時上邊的而廣播和服務都要進行相應的配置。

資訊清單檔的許可權和服務廣播註冊如下:

 <uses-permission android:name="android.permission.READ_PHONE_STATE"/>    <uses-permission android:name="android.permission.RECORD_AUDIO"/>     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<service android:name="com.ydl.recorder.RecorderServicer"></service>        <receiver android:name="com.ydl.recorder.BootReceiver">            <intent-filter >                <action android:name="android.intent.action.BOOT_COMPLETED"/>            </intent-filter>        </receiver>


Android初級教程實現電話錄音

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.