Skip to content

Commit e9a2569

Browse files
committed
fix: android calling
1 parent 212316d commit e9a2569

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
using Android.Runtime;
5+
using Android.Telephony;
6+
7+
namespace Windows.ApplicationModel.Calls
8+
{
9+
internal class CallCallback : TelephonyCallback, TelephonyCallback.ICallStateListener
10+
{
11+
public void OnCallStateChanged(int state)
12+
{
13+
PhoneCallManager.RaiseCallStateChanged();
14+
}
15+
}
16+
}

src/Uno.UWP/ApplicationModel/Calls/PhoneCallManager.Android.cs

+23-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Text;
4+
using System.Threading;
45
using Android.Content;
56
using Android.OS;
67
using Android.Telephony;
@@ -20,11 +21,32 @@ static PhoneCallManager()
2021
"PhoneCallManager was used too early in the application lifetime. " +
2122
"Android app context needs to be available.");
2223
}
24+
2325
_telephonyManager = (TelephonyManager)ContextHelper.Current
2426
.GetSystemService(Context.TelephonyService);
27+
28+
#pragma warning disable CS0618 // TelephonyManager is obsolete in API 31
29+
#pragma warning disable CA1422 // Validate platform compatibility
30+
if (Build.VERSION.SdkInt < BuildVersionCodes.S)
31+
{
32+
_telephonyManager.Listen(new CallStateListener(), PhoneStateListenerFlags.CallState);
33+
}
34+
else
35+
{
36+
RegisterTelephonyCallbackAsync();
37+
}
38+
#pragma warning restore CA1422 // Validate platform compatibility
39+
#pragma warning restore CS0618 // TelephonyManager is obsolete in API 31
40+
}
41+
42+
private static async void RegisterTelephonyCallbackAsync()
43+
{
2544
#pragma warning disable CS0618 // TelephonyManager is obsolete in API 31
2645
#pragma warning disable CA1422 // Validate platform compatibility
27-
_telephonyManager.Listen(new CallStateListener(), PhoneStateListenerFlags.CallState);
46+
if (await Extensions.PermissionsHelper.TryGetPermission(CancellationToken.None, Android.Manifest.Permission.ReadPhoneState))
47+
{
48+
_telephonyManager.RegisterTelephonyCallback(ContextHelper.Current.MainExecutor, new CallCallback());
49+
}
2850
#pragma warning restore CA1422 // Validate platform compatibility
2951
#pragma warning restore CS0618 // TelephonyManager is obsolete in API 31
3052
}

0 commit comments

Comments
 (0)