Я использую adb для звонка, но он заканчивается через 2-3 секунды.Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Я использую adb для звонка, но он заканчивается через 2-3 секунды.

Сообщение Anonymous »

На самом деле я создаю приложение для вызова телефонного номера с компьютера.
Я использую adb для отправки команды на Android, но когда я отправляю команду с терминала, она работает хорошо, однако когда я использую приложение, я завершил вызов через несколько секунд
вот код, в котором я думаю, проблема

Код: Выделить всё

private async Task CallPhoneNumbersAsync()
{
try
{
var selectedPhones = lbConnectedPhones.SelectedItems.Cast
().ToList();
var phoneQueue = new Queue(phoneNumbers);
var callTasks = new List();

foreach (var phone in selectedPhones)
{
callTasks.Add(Task.Run(() => HandlePhoneCallsAsync(phone, phoneQueue)));
}
await Task.WhenAll(callTasks); // Attend que tous les appels soient terminés
}
catch (Exception ex)
{
MessageBox.Show($"Error making calls: {ex.Message}", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
}

private async Task HandlePhoneCallsAsync(Phone phone, Queue phoneQueue)
{
while (phoneQueue.Count > 0 && !stopCalls)
{
PhoneNumber phoneNumber;
lock (phoneQueue)
{
if (phoneQueue.Count == 0)
break;
phoneNumber = phoneQueue.Dequeue();
}

dgPhoneNumbers.Dispatcher.Invoke(() =>
{
dgPhoneNumbers.SelectedItem = phoneNumber;
phoneNumber.CallStart = $"Début de l'appel : {DateTime.Now:HH:mm:ss}";
phoneNumber.CallingPhoneName = phone.Name;
phoneNumber.CallStatus = "En cours";
UpdatePhoneNumberDisplay(phoneNumber);
});

bool callSucceeded = await MakeCallAsync(phoneNumber.PrimaryNumber, phone.Name);
if (!callSucceeded && !string.IsNullOrEmpty(phoneNumber.SecondaryNumber))
{
callSucceeded = await MakeCallAsync(phoneNumber.SecondaryNumber, phone.Name);
}

dgPhoneNumbers.Dispatcher.Invoke(() =>
{
phoneNumber.CallEnd = $"Fin de l'appel : {DateTime.Now:HH:mm:ss}";
phoneNumber.CallStatus = callSucceeded ? "Terminé" : "Numéro inexistant";
UpdatePhoneNumberDisplay(phoneNumber);
});

await Task.Delay(5000); // Simulate a delay between calls
}

if (stopCalls)
{
MessageBox.Show("Calls stopped by user.", "Calls Stopped", MessageBoxButton.OK, MessageBoxImage.Information);
}
}

private async Task  MakeCallAsync(string number, string phone)
{
try
{
if (string.IsNullOrEmpty(number))
{
return false;
}

if (phone.Contains("Android"))
{
await MakeCallAndroidAsync(number, phone);
}
else if (phone.Contains("iOS"))
{
LaunchPhoneCall(number);
}
else
{
MessageBox.Show($"Unknown phone type for {phone}", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
return false;
}
return true;
}
catch (Exception ex)
{
MessageBox.Show($"Error making call to {number} on {phone}: {ex.Message}", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
return false;
}
}

private void LogMessage(string message)
{
string logFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "call_logs.txt");
string logMessage = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - {message}{Environment.NewLine}";
File.AppendAllText(logFilePath, logMessage);
}

private Task MakeCallAndroidAsync(string number, string device)
{
return Task.Run(async () =>
{
try
{
Process process = new Process();
process.StartInfo.FileName = AdbPath;
process.StartInfo.Arguments = $"-s {device.Substring(device.IndexOf(' ') + 1)} shell am start -a android.intent.action.CALL -d tel:{number.Replace(" ", "")}";
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.Start();

string result = process.StandardOutput.ReadToEnd();
string error = process.StandardError.ReadToEnd();
process.WaitForExit();

if (!string.IsNullOrEmpty(error))
{
LogMessage($"Error starting call: {error}");
MessageBox.Show($"Error: {error}", "Call Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
else
{
LogMessage($"Call started: {result}");
MessageBox.Show($"Call result: {result}", "Call Result", MessageBoxButton.OK, MessageBoxImage.Information);
}

bool isCallActive = true;
while (isCallActive)
{
await Task.Delay(2000);

Process checkCallProcess = new Process();
checkCallProcess.StartInfo.FileName = AdbPath;
checkCallProcess.StartInfo.Arguments = $"-s {device.Substring(device.IndexOf(' ') + 1)} shell dumpsys telecom";
checkCallProcess.StartInfo.RedirectStandardOutput = true;
checkCallProcess.StartInfo.UseShellExecute = false;
checkCallProcess.StartInfo.CreateNoWindow = true;
checkCallProcess.Start();

string callStatus = checkCallProcess.StandardOutput.ReadToEnd();
checkCallProcess.WaitForExit();

LogMessage($"Call status: {callStatus}");

if (!callStatus.Contains("CallActivity"))
{
isCallActive = false;
LogMessage("Call ended");
}
}
}
catch (Exception ex)
{
LogMessage($"Exception during call: {ex.Message}");
MessageBox.Show($"Error making Android call: {ex.Message}", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
});
}
Надеюсь, кто-нибудь сможет мне помочь. Извините, если информации недостаточно, не стесняйтесь спрашивать, нужна ли вам еще часть кода.


Подробнее здесь: https://stackoverflow.com/questions/787 ... -3-seconds
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»