Запись телефонных звонков в Android 7.0 и выше
Я использовал этот код, работает для Android 5.1(MotoE и MotoX и еще 1 устройство) и 8.1.0(Nokia 6), но не работает для 8.0(One Plus 5) и 7.0(MotoG5).
new Thread(new Runnable() {
@Override
public void run() {
try {
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
recorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
//recorder.setAudioEncodingBitRate(320000);
//recorder.setAudioSamplingRate(44100);
} catch (Exception e) {
e.printStackTrace();
}
File sampleDir = new File(Environment.getExternalStorageDirectory(), "/AutoCallPicker/PhoneCallRecord/");
if (!sampleDir.exists()) {
sampleDir.mkdirs();
}
//String file_name = "Record";
String file_name = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());//Naming according to date and time
try {
audioFile = File.createTempFile(file_name, ".amr",
sampleDir);
} catch (IOException e) {
e.printStackTrace();
}
//Set output file .
recorder.setOutputFile(audioFile.getAbsolutePath());
//String formattedMessage[] = audioFile.getAbsolutePath().split(Commands.SPLIT_BY_SLASH);
//fileNameRecordedCall = formattedMessage[formattedMessage.length - 1].toString();
try {
//Call prepare before start().
recorder.prepare();
//Start recording .
recorder.start();
recordStarted = true;
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
});
предоставленные разрешения
<!-- Calling permission -->
<uses-permission android:name="android.permission.PROCESS_INCOMING_CALLS" />
<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" />
<!-- permission to write on external storage -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Я также использовал Диспетчер политик устройств и назначил администратора устройства, как указано в принятом ответе по ссылке ниже. Как записывать телефонные звонки в Android?
но эта вещь не работает для любого устройства. Пожалуйста, помогите, какие настройки мне не хватает.