当前位置: 首页 > 知识库问答 >
问题:

Android-致命异常:main,无法启动活动,setAudioSource

舒仲渊
2023-03-14
package com.example.wesle.noisemachine;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Environment;
import android.widget.Toast;
import java.io.IOException;

public class ReceiveScreen extends AppCompatActivity {

private Button buttonStart, buttonStop, buttonPlay;
private MediaRecorder mediaRecorder = new MediaRecorder();
private String outputFile;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_receive_screen);

            buttonStart = (Button) findViewById(R.id.buttonStart);
            buttonStop = (Button) findViewById(R.id.buttonStop);
            buttonPlay = (Button) findViewById(R.id.buttonPlay);
            buttonStop.setEnabled(false);
            buttonPlay.setEnabled(false);
            outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/recording.3gp";
            mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            mediaRecorder.setOutputFile(outputFile);

            buttonStart.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                        try {
                            mediaRecorder.prepare();
                            mediaRecorder.start();
                        } catch (IllegalStateException ise) {
                        System.out.println("ISE Catch");
                    } catch (IOException ioe) {
                            System.out.println("ISE Catch");

                        }
                        buttonStart.setEnabled(false);
                        buttonStop.setEnabled(true);


                        Toast.makeText(getApplicationContext(), "Recording started", Toast.LENGTH_LONG).show();


                }
            });

            buttonStop.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                        mediaRecorder.stop();
                        mediaRecorder.release();

                        buttonStop.setEnabled(false);
                        buttonPlay.setEnabled(true);
                        buttonStart.setEnabled(true);

                        Toast.makeText(getApplicationContext(), "Recording Completed", Toast.LENGTH_LONG).show();
                }
            });

            buttonPlay.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            MediaPlayer mediaPlayer = new MediaPlayer();

                            try {
                                mediaPlayer.setDataSource(outputFile);
                                mediaPlayer.prepare();
                                mediaPlayer.start();
                            } catch (Exception e) {
                                System.out.println("E Catch");
                            }
                            Toast.makeText(getApplicationContext(), "Recording Playing", Toast.LENGTH_LONG).show();
                        }
            });

    //Code for the back button
    Button backbuttonR = (Button) findViewById(R.id.backbuttonR);
    backbuttonR.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            startActivity(new Intent(ReceiveScreen.this, MainActivity.class));
        }
    });
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.wesle.noisemachine">

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

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

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.example.wesle.noisemachine.TransmitScreen" />
        <activity android:name="com.example.wesle.noisemachine.ReceiveScreen"></activity>
    </application>

</manifest>

共有1个答案

韩安顺
2023-03-14
mediaPlayer.setDataSource(String);

失败,请参阅此以获得更多信息。

因此可以改用FileDescriptor

创建方法

private FileDescriptor openFile(String path)
    throws FileNotFoundException, IOException {
File file = new File(path);
FileOutputStream fos = new FileOutputStream(file);
return fos.getFD();
}
 try {
        mediaPlayer.setDataSource(openFile(outputFile));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
 类似资料: