Я пытался использовать медиа-рекордер, но он продолжает выдавать ошибки, я добавил запрос на разрешение, и это мой манифест. Когда я иду к Logcat, он говорит:
2020-04-23 18:23:46.754 12665-12665/com.example.soundmedi E/MediaRecorder: stop called in an invalid state: 4
2020-04-23 18:23:46.754 12665-12665/com.example.soundmedi D/AndroidRuntime: Shutting down VM
2020-04-23 18:23:46.767 12665-12665/com.example.soundmedi E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.soundmedi, PID: 12665
java.lang.IllegalStateException
at android.media.MediaRecorder.stop(Native Method)
at com.example.soundmedi.Activity4$1.onClick(Activity4.java:69)
at android.view.View.performClick(View.java:7125)
at android.view.View.performClickInternal(View.java:7102)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27336)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.soundmedi">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<application
android:allowBackup="true"
android:requestLegacyExternalStorage="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=".Activity5"></activity>
<activity android:name=".Activity4" />
<activity android:name=".Activity3" />
<activity android:name=".Activity2" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
package com.example.soundmedi;
import android.Manifest;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import java.io.File;
import java.io.IOException;
public class Activity4 extends AppCompatActivity {
private Button record, stop;
private MediaRecorder mediaRecorder;
private String outputFile;
private boolean permissionToRecordAccepted = false;
private String [] permissions = {Manifest.permission.RECORD_AUDIO};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_4);
record = (Button) findViewById(R.id.record);
stop = (Button) findViewById(R.id.stop);
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, getPackageManager().PERMISSION_GRANTED);
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, getPackageManager().PERMISSION_GRANTED);
File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File dir = new File(path + "/soundmedi/");
outputFile = String.valueOf(dir);/**Environment.getExternalStorageDirectory().getAbsolutePath() + "/recording.3gp";*/
mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setOutputFile("first.3gp");
mediaRecorder.setOutputFile("/0/Download/soundmedi/");
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (null != mediaRecorder) {
try{
mediaRecorder.stop();
mediaRecorder.reset();
mediaRecorder.release();
mediaRecorder = null;
Toast.makeText(getApplicationContext(), "done", Toast.LENGTH_LONG).show();
} catch(RuntimeException stopException) {
}
}
}
});
record.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
mediaRecorder.prepare();
mediaRecorder.start();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();// make something
}
Toast.makeText(getApplicationContext(), "Recording started", Toast.LENGTH_LONG).show();
record.setEnabled(false);
//recording for 10s
/**final Handler handler = new Handler();
final boolean b = handler.postDelayed(new Runnable() {
@Override
public void run() {
}
}, 10000);*/
}
});
}
}
введите описание изображения здесь