Java 保存文件时没有录音

Java 保存文件时没有录音,java,android,android-broadcast,mediarecorder,Java,Android,Android Broadcast,Mediarecorder,我正在努力使它的通话录音机一切正常,我正在得到的音频文件,但当我试图听它,我不能在这里的声音这里我的代码朋友请帮助我,我不能理解错误 Broadcastreceiver.java public class PhoneStateReceiver extends BroadcastReceiver { MediaRecorder startrecording; boolean recordstarted = false; @Override public void

我正在努力使它的通话录音机一切正常,我正在得到的音频文件,但当我试图听它,我不能在这里的声音这里我的代码朋友请帮助我,我不能理解错误

Broadcastreceiver.java

public class PhoneStateReceiver extends BroadcastReceiver {
    MediaRecorder startrecording;
    boolean recordstarted = false;

    @Override
    public void onReceive(Context context, Intent intent) {
        startrecording = new MediaRecorder();
        String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
        if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
            Toast.makeText(context, "Incoming call", Toast.LENGTH_SHORT).show();
        }
        if (state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) {
            Toast.makeText(context, "Received", Toast.LENGTH_SHORT).show();
            startrecording.reset();
            startrecording.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
            startrecording.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            startrecording.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            startrecording.setOutputFile("/sdcard/sample.3gp");
            startrecording.setOnErrorListener(new MediaRecorder.OnErrorListener() {
                @Override
                public void onError(MediaRecorder mediaRecorder, int i, int i1) {
                    Log.d("Error",mediaRecorder.toString()+" "+String.valueOf(i)+" "+String.valueOf(i1));
                }
            });
            startrecording.setOnInfoListener(new MediaRecorder.OnInfoListener() {
                @Override
                public void onInfo(MediaRecorder mediaRecorder, int i, int i1) {
                    Log.d("info",mediaRecorder.toString()+" "+String.valueOf(i)+" "+String.valueOf(i1));
                }
            });
            try {
                startrecording.prepare();
                startrecording.start();
                recordstarted = true;
                Toast.makeText(context, "Recording Started", Toast.LENGTH_SHORT).show();
            } catch (IOException e) {
                e.printStackTrace();

            }
        }
        if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
            Toast.makeText(context, "Idle", Toast.LENGTH_SHORT).show();
            if (recordstarted) {
                startrecording = new MediaRecorder();
                startrecording.stop();
                startrecording.reset();
                startrecording.release();
                recordstarted = false;
            }
        }
    }
}
Manifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.prominere.prominere.incomingcall">
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.STORAGE" />

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

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name=".PhoneStateReceiver">
            <intent-filter>
                <action android:name="android.intent.action.PHONE_STATE" />
            </intent-filter>
        </receiver>
    </application>

</manifest>


AFAIK,由于法律问题,Android不允许录制通话。但我们是游戏商店的应用程序一样的通话录音机。Android没有采取任何措施阻止语音通话录制,因此我不确定这一法律问题索赔的来源(如果最近确实发生了变化,请提供相关提交的链接)。问题是,Android本身并没有实现任何语音通话记录功能,因为它是一个依赖于平台的功能。因此,由平台提供商和/或OEM来实现该功能。有的有,有的没有。你试过只录制上行或下行音频,看看是否有效吗?是的,我试过Mafaik,由于法律问题,Android不允许录制通话。但我们是游戏商店的应用程序一样的通话录音机。Android没有采取任何措施阻止语音通话录制,所以我不确定这一法律问题的说法来自何方(如果最近确实发生了变化,请提供相关提交的链接).问题是,Android本身没有实现任何语音通话录音功能,因为这是一项依赖于平台的功能。因此,实现该功能取决于平台提供商和/或OEM。有些实现,有些不实现。你是否尝试过只录制上行或下行音频,看看是否有效?是的,我已经尝试过了