Привет, я просто создаю приложение для записи звонков в xamarin android. У меня есть логи записи звонков c, добавленные в Приемник вещания. когда я добавляю эту логи c в активности и пытаюсь записать голос, все работает нормально. но когда я помещаю logi c в файлы приемника вещания, создаются аудиофайлы, но когда я пытаюсь воспроизвести его, он не воспроизводит звук и не выдает никаких ошибок. Даже размер файла больше 10 МБ, что означает, что файлы также не пусто. Может кто-нибудь, пожалуйста, помогите мне в этом. Вот мой полный код приемника вещания
//Boroadcast receiver start here
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;
using Android.App;
using Android.Content;
using Android.Media;
using Android.OS;
using Android.Runtime;
using Android.Telephony;
using Android.Util;
using Android.Views;
using Android.Widget;
namespace App2
{
[BroadcastReceiver(Enabled = true, Exported = true)]
[IntentFilter(new[] { TelephonyManager.ActionPhoneStateChanged, Intent.ActionNewOutgoingCall })]
public class SimpleBroadCast : BroadcastReceiver
{
MediaRecorder _recorder;
public override void OnReceive(Context context, Intent intent)
{
try
{
var state = intent.GetStringExtra(TelephonyManager.ExtraState);
var status = intent.GetStringExtra(Intent.ExtraPhoneNumber);
Toast.MakeText(context, "OnReceive start"+ status, ToastLength.Long).Show();
if (state == TelephonyManager.ExtraStateOffhook)
{
StartRecording(context);
}
else if (state == TelephonyManager.ExtraStateIdle)
{
StopRecording(context);
}
Toast.MakeText(context, "OnReceive end", ToastLength.Long).Show();
}
catch(Exception ex)
{
Toast.MakeText(context, ex.Message, ToastLength.Long).Show();
}
}
//Method to stop recording
void StopRecording(Context context)
{
_recorder = PhoneListner.mediaRecorder;
if (_recorder == null)
{
return;
}
_recorder.Stop();
_recorder.Release();
_recorder = null;
Toast.MakeText(context, "Recording Stop", ToastLength.Long).Show();
}
void StartRecording(Context context)
{
_recorder = new MediaRecorder();
_recorder.SetAudioSource(AudioSource.Mic);
_recorder.SetOutputFormat(OutputFormat.ThreeGpp);
_recorder.SetOutputFile(GetFileNameForRecording(context));
_recorder.SetAudioEncoder((AudioEncoder.AmrNb));
try
{
_recorder.Prepare();
}
catch (IOException ioe)
{
// Log.Error(TAG, ioe.ToString());
}
_recorder.Start();
PhoneListner.mediaRecorder = _recorder;//storing the object in property for future use to
//stop the recording
Toast.MakeText(context, "Recording started", ToastLength.Long).Show();
}
public string GetFileNameForRecording(Context context)
{
var filename = "Rec_" + DateTime.Now + ".3gpp";//code to generate dynamic file name
string dir= context.GetExternalFilesDir(Android.OS.Environment.DirectoryDownloads).AbsolutePath;
string file = Path.Combine(dir, filename);
return file;
}
}
}