Я создал приемник, который он читает, когда поступает входящий вызов. Когда я получаю звонок, я отправляю его через httpclient на сервер. Моя проблема в том, что иногда он отправляет его Вот мой код:
[BroadcastReceiver()]
[IntentFilter(new[] { "android.intent.action.PHONE_STATE" })]
public class BroadcastReceiverClass : BroadcastReceiver
{
private string ipAdress = "";
public void BroadcastReceiverSetIp(string ip)
{
ipAdress = ip;
}
public override void OnReceive(Context context, Intent intent)
{
// ensure there is information
if (intent.Extras != null)
{
// get the incoming call state
string state = intent.GetStringExtra(TelephonyManager.ExtraState);
// check the current state
if (state == TelephonyManager.ExtraStateRinging)
{
// read the incoming call telephone number...
string telephone = intent.GetStringExtra(TelephonyManager.ExtraIncomingNumber);
if (string.IsNullOrEmpty(telephone))
telephone = string.Empty;
sendTelephone(telephone,context);
}
}
}
private async void sendTelephone(string telephone, Context context)
{
try
{
if (!string.IsNullOrWhiteSpace(ipAdress))
{
if (telephone.Length == 13)
telephone = telephone.Substring(3);
using (var client = new HttpClient())
{
client.Timeout = TimeSpan.FromMilliseconds(20000);
var response = await client.PostAsync("http://" + ipAdress + ":9090/api/SqlAction/", new StringContent("20:" + telephone, Encoding.UTF8, "application/json"));
}
}
}
catch (Exception ex)
{
CatchException.LogFile(this.Class.SimpleName, ex);
}
}
}
Я зарегистрировал свой приемник Broadcast внутри от активности.
var receiver = new BroadcastReceiverClass();
receiver.BroadcastReceiverSetIp(MyIp);
RegisterReceiver(receiver, new IntentFilter("android.intent.action.PHONE_STATE"));
this.MoveTaskToBack(true);
Безопасно ли использовать wake? Блокировка и блокировка Wi-Fi каждый раз, когда я получаю получить? Как пример ниже
private async void sendTelephone(string telephone, Context context)
{
try
{
var pm = (PowerManager)context.GetSystemService(Context.PowerService);
var wakeLock = pm.NewWakeLock(WakeLockFlags.Partial, "MyWakeLock");
wakeLock.Acquire();
var wm = (WifiManager)context.GetSystemService(Context.WifiService);
var wifiLock = wm.CreateWifiLock(WifiMode.FullHighPerf, "MyWifiLock");
wifiLock.Acquire();
if (!string.IsNullOrWhiteSpace(ipAdress))
{
if (telephone.Length == 13)
telephone = telephone.Substring(3);
using (var client = new HttpClient())
{
client.Timeout = TimeSpan.FromMilliseconds(20000);
var response = await client.PostAsync("http://" + ipAdress + ":9090/api/SqlAction/", new StringContent("20:" + telephone, Encoding.UTF8, "application/json"));
}
}
if (wakeLock != null && wakeLock.IsHeld)
wakeLock.Release();
if (wifiLock != null && wifiLock.IsHeld)
wifiLock.Release();
}
catch (Exception ex)
{
CatchException.LogFile(this.Class.SimpleName, ex);
}
}