`
369540808
  • 浏览: 196522 次
文章分类
社区版块
存档分类
最新评论

Android--service服务--MediaRecorder--电话录音

 
阅读更多


一、通过Intent启动服务:


package com.jiangge.callstatuslistener;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		Intent intent = new Intent(this, PhoneStatusService.class);
		startService(intent);
	}
}


二、PhoneStatusService.java

package com.jiangge.callstatuslistener;

import java.io.IOException;

import android.app.Service;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;

public class PhoneStatusService extends Service {

	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}

	@Override
	public void onCreate() {
		super.onCreate();
		System.out.println("===>>>服务被创建了");
		TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
		tm.listen(new MyPhoneStatusListener(), PhoneStateListener.LISTEN_CALL_STATE);// 监听手机的通话状态的变化
	}

	private class MyPhoneStatusListener extends PhoneStateListener {
		MediaRecorder recorder;
		@Override
		public void onCallStateChanged(int state, String incomingNumber) {
			super.onCallStateChanged(state, incomingNumber);
			try {
				switch (state) {
				case TelephonyManager.CALL_STATE_IDLE: // 空闲状态,没有通话没有响铃
					if (recorder != null) {
						recorder.stop();
						recorder.reset();
						recorder.release();
						recorder = null;
					}
					break;
				case TelephonyManager.CALL_STATE_RINGING: // 响铃状态
					System.out.println("发现来电号码" + incomingNumber);
					recorder = new MediaRecorder();// 创建一个录音机
					recorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 设置录制的音频源从话筒里面获取声音
					recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
					recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
					recorder.setOutputFile("/sdcard/" + System.currentTimeMillis() + ".3gp");
					recorder.prepare();

					break;
				case TelephonyManager.CALL_STATE_OFFHOOK: // 通话状态
					if (recorder != null) {
						recorder.start();
					}
					break;
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
		System.out.println("===>>>服务被销毁了");
	}

}

注:/sdcard 不要硬编码

Do not hardcode "/sdcard/"; use Environment.getExternalStorageDirectory().getPath()instead


三、清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.jiangge.callstatuslistener"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.jiangge.callstatuslistener.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <service android:name=".PhoneStatusService" >
        </service>
    </application>

</manifest>

注,权限:

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


效果图:


项目文件结构:



注:MediaRecorder文档中写得很清楚的。



分享到:
评论

相关推荐

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    7.11 自制录音/播放录音程序——MediaRecorder与AudioEncoder 7.12 通过收到短信开始秘密录音——MediaRecorder与BroadcastReceiver实例 7.13 内置影片播放器载入3gp电影——VideoViewWidget 7.14 自制3gp影片播放器...

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    7.11 自制录音/播放录音程序——MediaRecorder与AudioEncoder 7.12 通过收到短信开始秘密录音——MediaRecorder与BroadcastReceiver实例 7.13 内置影片播放器载入3gp电影——VideoViewWidget 7.14 自制3gp影片播放器...

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    7.11 自制录音/播放录音程序——MediaRecorder与AudioEncoder 7.12 通过收到短信开始秘密录音——MediaRecorder与BroadcastReceiver实例 7.13 内置影片播放器载入3gp电影——VideoViewWidget 7.14 自制3gp影片播放器...

    Android开发四大组件之实现电话拦截和电话录音

    一、问题描述  使用BordercastReceiver和Service组件实现下述功能: 1.当手机处于来电状态,启动监听服务,对... Android没有对外公开结束通话的API,要结束通话就必须使用AIDL与电话管理服务进行通信,并调用服务中的

    Google Android SDK开发范例大全的目录

    7.11 自制录音/播放录音程序——MediaRecorder与AudioEncoder 7.12 通过收到短信开始秘密录音——MediaRecorder与BroadcastReceiver实例 7.13 内置影片播放器载入3gp电影——VideoViewWidget 7.14 自制3gp影片播放器...

    Google Android SDK开发范例大全(完整版附部分源码).pdf

    7.11 自制录音/播放录音程序——MediaRecorder与AudioEncoder 7.12 通过收到短信开始秘密录音——MediaRecorder与BroadcastReceiver实例 7.13 内置影片播放器载入3gp电影——VideoViewWidget 7.14 自制3gp影片...

    Google Android SDK 开发范例大全01

    7.11 自制录音/播放录音程序——MediaRecorder与AudioEncoder 7.12 通过收到短信开始秘密录音——MediaRecorder与BroadcastReceiver实例 7.13 内置影片播放器载入3gp电影——VideoViewWidget 7.14 自制3gp影片播放器...

    Google Android SDK 开发范例大全02

    7.11 自制录音/播放录音程序——MediaRecorder与AudioEncoder 7.12 通过收到短信开始秘密录音——MediaRecorder与BroadcastReceiver实例 7.13 内置影片播放器载入3gp电影——VideoViewWidget 7.14 自制3gp影片播放器...

    Google Android sdk 开发范例大全 部分章节代码

    7.11 自制录音/播放录音程序——MediaRecorder与AudioEncoder 7.12 通过收到短信开始秘密录音——MediaRecorder与BroadcastReceiver实例 7.13 内置影片播放器载入3gp电影——VideoViewWidget 7.14 自制3gp影片播放器...

    基于Android的药材管理作业.zip

    要求语言:JAVA安卓开发 实现对药材数据库的管理(增删改查) 包括药材名称,药材的图片,药材的读音,功效,主治等基本信息 ...4.采用了服务service进行录音处理 5.采用MediaRecorder进行了录音处理

    Google+Android+SDK开发范例大全

    7.10 播放存储卡里的mp3音乐——MediaPlayer.setDataSource 7.11 自制录音/播放录音程序——MediaRecorder与AudioEncoder 7.12 通过收到短信开始秘密录音——MediaRecorder与BroadcastReceiver实例 7.13 内置影片...

    Google Android SDK开发范例大全(完整版)

    7.11 自制录音/播放录音程序——MediaRecorder与AudioEncoder 7.12 通过收到短信开始秘密录音——MediaRecorder与BroadcastReceiver实例 7.13 内置影片播放器载入3gp电影——VideoViewWidget 7.14 自制3gp影片播放器...

    ophone多媒体编程

    7.3.1 MediaRecorder的状态图 299 7.3.2 录音器实例 301 7.4 MP3文件格式分析 306 7.4.1 MP3文件介绍 307 7.4.2 ID3V1标签 307 7.4.3 ID3V2标签 310 7.4.4 MP3帧结构 316 7.4.5 分割MP3文件 323 7.5 案例...

Global site tag (gtag.js) - Google Analytics