I am trying to get information about my phone's microphone through the MicrophoneInfo library in android studio, but when I use a simple method that returns an integer like getId() or getLocation()... I get the following error....
My code is the following...
package com.example.mi_microfono;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.content.pm.PackageManager;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.media.AudioDeviceInfo;
import android.media.MicrophoneInfo.Coordinate3F;
import android.media.MicrophoneInfo;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.TextView;
import java.io.IOException;
import java.util.List;
public class MainActivity extends AppCompatActivity {
    private MicrophoneInfo miMicrofono;
    private TextView infoMicrofono;
    private MediaRecorder grabacion;
    private String archivoSalida = null;
    private AudioDeviceInfo micMic;
    @RequiresApi(api = Build.VERSION_CODES.Q)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.RECORD_AUDIO}, 1000);
        }
        infoMicrofono = (TextView) findViewById(R.id.infoMicro);
        configMicro();
    }
    public void configMicro(){
        if (grabacion==null){
            archivoSalida = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC) + "/grabacion5.mp3";
            grabacion = new MediaRecorder();
            grabacion.setAudioSource(MediaRecorder.AudioSource.MIC);
            grabacion.setAudioSamplingRate(44100);
            grabacion.setAudioEncodingBitRate(96000);
            grabacion.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            grabacion.setOutputFile(archivoSalida);
            grabacion.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB );
        }
        try{
            grabacion.prepare();
            grabacion.start();
        }catch (IOException e){
            String mensajeError = e.getMessage();
            //mensaje.setText(mensajeError);
        }
    }
    @RequiresApi(api = Build.VERSION_CODES.P)
    public void dataMicro(View view){
        int data;
        try {
            data = miMicrofono.getId();
            infoMicrofono.setText("Locación: " + data);
        }catch (NullPointerException e){
            infoMicrofono.setText("error: " + e);
        }
        grabacion.stop();
    }
}
After doing what I described before, I want to use the getFrequencyResponse() method, to get the frequency of the audio detected live by my phone's microphone, I want to detect the frequency directly without having to record and/or play an audio.
Please, could someone help me?
