media-电话录音导出的文件为什么不能播放?

问题描述

电话录音导出的文件为什么不能播放?

写了一个电话录音的程序,但是在向SD卡中刻录声音的时候,并不是期望的3gp格式,无法进行播放,不知道是什么原因?

代码如下

配置文件:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.xushuai.phonelistener"
    android:versionCode="1"
    android:versionName="1.0">

    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" />

    <application android:label="@string/app_name"
        android:icon="@drawable/ic_launcher"
        android:theme="@style/AppTheme">
        <service android:name=".PhoneService"></service>

        <receiver android:name=".BootBroadcastReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>

    </application>

    <!-- 电话状态监听权限 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <!--向SD卡写入数据权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <!-- 在SD卡中创建与删除文件权限 -->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <!-- 刻录权限 -->
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
</manifest>

刻录的业务类:

import java.io.File;

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;

public class PhoneService extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }
    //在创建服务时,进行一些初始化
    @Override
    public void onCreate() {
        super.onCreate();
        //获取电话管理服务
        TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        telephonyManager.listen(new PhoneListener(), PhoneStateListener.LISTEN_CALL_STATE);//通过监听对象对呼叫状态进行监听

    }
    private final class PhoneListener extends PhoneStateListener{

        private String incomingNumber;
        private File file;
        private MediaRecorder mediaRecorder;

        //当呼叫状态改变时,调用该方法
        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            try {
                switch (state) {
            case TelephonyManager.CALL_STATE_RINGING://来电
                this.incomingNumber = incomingNumber;
                break;

            case TelephonyManager.CALL_STATE_OFFHOOK://接通电话
                file = new File(Environment.getExternalStorageDirectory(),incomingNumber+System.currentTimeMillis());
                mediaRecorder = new MediaRecorder();
                mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);//指定声音来源:话筒,这里只能录打电话的声音,而不能录入传入的声音
                //mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置音频输出格式
                mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);//THREE_GPP);//设置音频输出格式
                mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//设置音频编码格式
                mediaRecorder.setOutputFile(file.getAbsolutePath());
                mediaRecorder.prepare();
                mediaRecorder.start();//开始录音

            case TelephonyManager.CALL_STATE_IDLE://挂断电话后回归到空闲状态
                if(mediaRecorder!=null)
                    mediaRecorder.stop();
                    mediaRecorder.release();
                    mediaRecorder = null;
                break;
            }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }

}

通过广播接收者进行应用的注册,这里的广播接收者监听的是手机启动的广播

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class BootBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        Intent service = new Intent(context,PhoneService.class);
        context.startService(service);//Intent激活组件(Service)
    }

}

解决方案

mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

你这里设置的录音格式是 amr啊,录出来的当然不是3gpp格式的了,改成 3gpp就好了

解决方案二:

答案就是还没录完你就开始导出。

时间: 2024-07-30 13:27:38

media-电话录音导出的文件为什么不能播放?的相关文章

电话录音软件-AOFAX电话录音系统为什么没有后台文件?

问题描述 AOFAX电话录音系统为什么没有后台文件? 电话录音文件找不到,系统是AOFAX的,求助各位大神. 路径是有的,在D盘: 电话也是能够正常通话,但是就是没有录音文件,通话记录为零.

android电话、短信黑白名单拦截、电话录音

功能描述:  总的来说这是一个防骚扰的应用,设置黑名单,白名单,通话录音名单.添加到黑名单的联系人或号码将被拒绝来电或短信:添加到白名单的联系人或号码将通过来电或短信(除白名单以外的号码将被拒绝来电或短信),因此逻辑上黑名单和白名单是不能同时开启的:添加到通话录音列表的联系人或号码,连接通话时将会开启录音,挂断时完成录音. 先上图,接着分析实现这几个部分的关键技术点,最后附上安装程序apk和工程源码.     要重点具备的知识: 电话拦截部分:   电话是手机最基本的服务,自然在系统服务中可以获

ASP如何通过OWC把网页数据导出EXECL文件

数据|网页|owc ASP通过OWC组件把网页数据导出EXECL文件,实现代码如下: <%'先要用regsvr32.exe msowc.dll注册owc组件(msowc.dll安装office2000后就有了,在office的安装目录下搜索*owc*.chm可找到这关于owc的帮助文档)Dim objOWCDim ExeclFileName ExeclFileName = server.mappath("ExeclText.xls")Set objOWC = Server.Cre

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

一.问题描述 使用BordercastReceiver和Service组件实现下述功能: 1.当手机处于来电状态,启动监听服务,对来电进行监听录音. 2.设置电话黑名单,当来电是黑名单电话,则直接挂断. 当拨打电话或电话状态发生改变时,系统就会发出有序广播,因此我们可以使用BordercastReceiver接受广播,因BordercastReceiver执行时间短不能执行耗时任务也不能使用子线程,因此我们应启动一个Service来监听电话并进行处理 二.加入AIDL文件 Android没有对外

android编程实现电话录音的方法_Android

本文实例讲述了android编程实现电话录音的方法.分享给大家供大家参考.具体如下: 在清单文件AndroidManifest.xml中添加权限: <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <!-- 在SDCard中创建与删除文件权限 --> <uses-permission android:name="android.permission.MOUN

酷狗K歌录音怎么导出 酷狗K歌录音导出的方法

酷狗K歌录音导出操作流程分享 打开你手机的文件浏览器,我的手机酷狗安装在[内存设备]中,进入[内存设备],依次进入[内存设备/kugou/down_c/default/].在这个文件夹下您会发现很多用16进制码命名的[.kgtmp]文件了,如果想在电脑中使用我们可以下载音乐格式转换器进行转换了,如转换在mp3等即可通杀所有设备了.

android编程实现电话录音的方法

本文实例讲述了android编程实现电话录音的方法.分享给大家供大家参考.具体如下: 在清单文件AndroidManifest.xml中添加权限: <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <!-- 在SDCard中创建与删除文件权限 --> <uses-permission android:name="android.permission.MOUN

配置-android导出apk文件权限消失

问题描述 android导出apk文件权限消失 我用模拟器运行程序一切正常,然后导出apk安装时发现没有任何权限需求,然后返回看manifest里配置的权限全都不见了.反复导出了几次都这样,添加一次权限导出就没了 解决方案 编辑器的问题,建议重新安装!

PHP导入和导出Excel文件

一.PHP导出Excel文件 1:第一推荐无比风骚的PHPExcel,官方网站: http://www.codeplex.com/PHPExcel导入导出都成,可以导出office2007格式,同时兼容2003 2.使用pear的Spreadsheet_Excel_Writer类下载地址: http://pear.php.net/package/Spreadsheet_Excel_Writer此类依赖于OLE,下载地址:http://pear.php.net/package/OLE需要注意的是导