码迷,mamicode.com
首页 > 移动开发 > 详细

android服务(service)初步——通话录音

时间:2014-10-27 19:28:53      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:android   style   blog   http   io   color   os   ar   java   

启动服务之后,监听手机TelephonyManager状态,根据不同情况做出选择,源码以及截图如下:

bubuko.com,布布扣

生成的录音文件:

bubuko.com,布布扣

Log日志:

bubuko.com,布布扣

 

这个不知道为什么,点击多次停止服务的时候,总是会出现下面的BUG:

图片看不清楚,我把日志复制了出来如下:

09-21 19:56:31.850: ERROR/audio_input(34): unsupported parameter: x-pvmf/media-input-node/cap-config-interface;valtype=key_specific_value
09-21 19:56:31.850: ERROR/audio_input(34): VerifyAndSetParameter failed

知道原因的,麻烦告诉我,灰常感激。。。俺百度了好久不知道为啥。

 

bubuko.com,布布扣

源码:

MainActivity:

package com.song;  
  
import android.app.Activity;  
import android.content.Intent;  
import android.os.Bundle;  
import android.util.Log;  
import android.view.View;  
import android.widget.Button;  
  
public class PhoneListenerActivity extends Activity  
{  
  
    protected static final String ACTION = "recordingFlag";  
    protected static final String TAG = "TAG";  
    Button btnStart;  
    Button btnStop;  
  
    @Override  
    public void onCreate(Bundle savedInstanceState)  
    {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
  
        btnStart = (Button) findViewById(R.id.btnstart);  
        btnStop = (Button) findViewById(R.id.btnstop);  
  
        btnStart.setOnClickListener(new Button.OnClickListener()  
        {  
  
            @Override  
            public void onClick(View v)  
            {  
                Log.v(TAG, "startService");  
                startService(new Intent(ACTION));  
            }  
        });  
  
        btnStop.setOnClickListener(new Button.OnClickListener()  
        {  
  
            @Override  
            public void onClick(View v)  
            {  
                Log.v(TAG, "stopService");  
                stopService(new Intent(ACTION));          
            }  
  
        });  
  
    }  
}  

服务类:

package com.song;  
  
import java.io.IOException;  
  
import android.app.Service;  
import android.content.Context;  
import android.content.Intent;  
import android.media.MediaRecorder;  
import android.os.Environment;  
import android.os.IBinder;  
import android.telephony.PhoneStateListener;  
import android.telephony.TelephonyManager;  
import android.util.Log;  
  
public class PhoneListenerService extends Service  
{  
  
    private MediaRecorder recorder;  
    private boolean recording = false;  
  
    @Override  
    public IBinder onBind(Intent intent)  
    {  
        return null;  
    }  
  
    @Override  
    public void onCreate()  
    {  
        TelephonyManager manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);  
        manager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);  
        super.onCreate();  
    }  
  
    private PhoneStateListener listener = new PhoneStateListener()  
    {  
  
        @Override  
        public void onCallStateChanged(int state, String incomingNumber)  
        {  
            super.onCallStateChanged(state, incomingNumber);  
            switch (state)  
            {  
            case TelephonyManager.CALL_STATE_IDLE:// 空闲或者挂断  
                // 挂断就停止录音  
                stopRecord();  
                break;  
            case TelephonyManager.CALL_STATE_RINGING:// 响铃  
                // 响铃什么都不做  
                break;  
            case TelephonyManager.CALL_STATE_OFFHOOK:// 接起电话  
                // 接起电话开始录音  
                recordCalling();  
                break;  
            default:  
                break;  
            }  
        }  
    };  
  
    private void stopRecord()  
    {  
        if (recording)  
        {  
            Log.v("TAG", "stopRecord");  
            recorder.stop();  
            recorder.release();// 释放资源  
        }  
    }  
  
    private void recordCalling()  
    {  
  
        try  
        {  
            Log.v("TAG", "recordCalling");  
            recorder = new MediaRecorder();  
            recorder.setAudioSource(MediaRecorder.AudioSource.MIC);  
            recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);  
            recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);  
            recorder.setOutputFile(Environment.getExternalStorageDirectory()  
                    .getAbsolutePath()+"/" + System.currentTimeMillis() + ".3gp");  
            recorder.prepare();  
            recorder.start();  
            recording = true;  
        }catch (Exception e)  
        {  
            e.printStackTrace();  
        }  
  
    }  
}  

配置文件:

<?xml version="1.0" encoding="utf-8"?>  
<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
      package="com.song"  
      android:versionCode="1"  
      android:versionName="1.0">  
    <uses-sdk android:minSdkVersion="8" />  
  
    <application android:icon="@drawable/icon" android:label="@string/app_name">  
        <activity android:name=".PhoneListenerActivity"  
                  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=".PhoneListenerService">  
        <intent-filter>  
            <action android:name="recordingFlag"/>  
        </intent-filter>  
    </service>  
      
    </application>  
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>  
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>  
    <!-- 向sdcard中写数据的权限 -->  
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
</manifest>  

 

android服务(service)初步——通话录音

标签:android   style   blog   http   io   color   os   ar   java   

原文地址:http://www.cnblogs.com/a354823200/p/4054825.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!