BestOwl / MyPhone

Connect your mobile devices (Android/iOS/WindowsPhone) to PC
MIT License
189 stars 37 forks source link

PhoneLineTransportDevice API no longer works on Windows 22H2 #26

Open BestOwl opened 1 year ago

BestOwl commented 1 year ago

Recently I discovered that starting Windows 11 22H2 (build 22621), PhoneLineTransportDevice API no longer works, which resulted in our app's Calling feature no longer working.

The Calling feature currently relies on the PhoneLineTransportDevice API. The following is a brief description of how to use this API:

  1. Enumerate a PhoneLineTransportDevice using either the DeviceWatcher or DeviceInformation.
  2. Call PhoneLineTransportDevice.RegisterApp() to register the app with Windows for the associated PhoneLineTransportDevice.
  3. Call PhoneLineTransportDevice.ConnectAsync().
  4. Use PhoneLineWatcher to enumerate PhoneLine, similar to the DeviceWatcher.
  5. Call PhoneLine.Dial() Note: Microsoft's Your Phone (now called Phone Link) uses the same mechanism to implement the Calling feature as of 2020, not sure for now.

However, after upgrading to Windows 11 22H2 (build 22621), calling PhoneLineTransportDevice.RegisterApp() either results in non-functional or throws a System.UnauthorizedAccessException, even though PhoneLineTransportDevice.RequestAccessAsync() returns "Allowed".

I tested Phone Link on my PC and verified that it works without any issues. Therefore, I am not sure why our app is experiencing this problem.

I am seeking assistance in resolving this issue. If the PhoneLineTransportDevice API is no longer usable, I am open to suggestions for alternative solutions.

BestOwl commented 1 year ago

Windows 10 22H2 also has this issue.

BestOwl commented 1 year ago

New discovery on Windows 11 22H2: In UWP apps, PhoneLineTransportDevice.RequestAccessAsync() now will always return "DeniedBySystem"

BestOwl commented 1 year ago

I made a small UWP app to test this API. https://github.com/BestOwl/MyPhone.CallingDiagnosis.Pltd

Here are the test results: OS API status
Windows 11 22H2 PhoneLineTransportDevice.RequestAccessAsync() return DeniedBySystem
Windows 10 22H2 PhoneLineTransportDevice.ConnectAsync() return false, unable to connect
Windows 10 21H2
Windows LTSC 2021
BestOwl commented 1 year ago

Found this method in YourPhone.Calling.Managed.dll from the latest PhoneLink app:

public static unsafe bool TryUnlockPhoneLineTransportDeviceAPIs(IObjectReference _obj)

Seems like Microsoft blocks this API on purpose🤔.

abusaadp commented 1 year ago

Has Microsoft made an official announcement that Bluetooth calling will not work in Windows 11? Or have they changed the API for Bluetooth calling?

abusaadp commented 1 year ago

I contacted Microsoft and they said they were not aware of this issue. After checking they said there is some permission issue with this API in Windows 11 and they will resolve it soon. So we must wait for Microsoft to resolve this issue. Thats why this API is working for PhoneLink app as it may not have this permission issue.

abusaadp commented 10 months ago

Recently I got an email from Microsoft saying that this issue has been resolved but still the app is not working for me. The windows version has been updated to 23H2. Also even in the previous version of Windows namely 22H2 the bluetooth calling was working for the following apps.

  1. Grid3 (https://thinksmartbox.com/product/grid-3/)
  2. CallCenter (https://www.justremotephone.com/) and
  3. Thy Phone (https://apps.microsoft.com/detail/thy-phone/9PKT9JS17KXZ?hl=en-us&gl=US)

So few of the apps bluetooth calling is working for 22H2 itself. Maybe there is some issue in our app.

Manmenhongyi commented 7 months ago

I have encountered such a problem. After compiling, packaging and installing, I can't make a phone call. When I press the dial key, the software will crash.😰

Manmenhongyi commented 7 months ago

I can't use the dial-up call function normally in Windows10 22H2 and Windows11 23H2.😩

zhenbohuang commented 7 months ago

@BestOwl

I try CallCenter (https://www.justremotephone.com/) and Intel Unison in 22H2, and both them worked fine.

And i find that both them pair the phone in app, but not from OS. And if you pair the phone from OS firstly, you need pair from the app again, or unpair from OS then pair again from the app before you can add the phone to the app.

Maybe it is the reason of why PhoneLineTransportDevice.RegisterApp() throws a System.UnauthorizedAccessException, because the phone is NOT pair by the app, so the app do not have enough permission to link it?

BestOwl commented 7 months ago

@BestOwl

I try CallCenter (https://www.justremotephone.com/) and Intel Unison in 22H2, and both them worked fine.

And i find that both them pair the phone in app, but not from OS. And if you pair the phone from OS firstly, you need pair from the app again, or unpair from OS then pair again from the app before you can add the phone to the app.

Maybe it is the reason of why PhoneLineTransportDevice.RegisterApp() throws a System.UnauthorizedAccessException, because the phone is NOT pair by the app, so the app do not have enough permission to link it?

I tried paring the phone in-app, but still no luck.

BestOwl commented 7 months ago

Recently I got an email from Microsoft saying that this issue has been resolved but still the app is not working for me. The windows version has been updated to 23H2. Also even in the previous version of Windows namely 22H2 the bluetooth calling was working for the following apps.

  1. Grid3 (https://thinksmartbox.com/product/grid-3/)
  2. CallCenter (https://www.justremotephone.com/) and
  3. Thy Phone (https://apps.microsoft.com/detail/thy-phone/9PKT9JS17KXZ?hl=en-us&gl=US)

So few of the apps bluetooth calling is working for 22H2 itself. Maybe there is some issue in our app.

It looks like Thy Phone uses the same PhoneLineTransportDevice API. I'm not sure how they manage to make it work.

BestOwl commented 7 months ago

https://gist.github.com/ADeltaX/285e017a1fefb0723b526246066b9f43

Check this out

BestOwl commented 7 months ago

https://gist.github.com/ADeltaX/285e017a1fefb0723b526246066b9f43

Check this out

Still no luck after trying this.

Manmenhongyi commented 7 months ago

Is there any alternative solution to this API? ? ?

BestOwl commented 6 months ago

In the recent Windows 11 22H2 release Microsoft deprecated a number of APIs used for making phone calls. Previously Thy Phone had used these because they presented a standard Windows dialog for call handling (incoming and outgoing) and the experience was consistent with Your Phone / Phone Link. https://inthehand.com/2022/10/26/thy-phone-for-windows-11/

Yes, there is a new API, but I can't find any documentation about this new API.

BestOwl commented 6 months ago

Found an undocumented property System.Devices.PhoneLineTransportDevice.Connected https://github.com/MicrosoftDocs/winrt-api/issues/1715

Thunder-Ray commented 6 days ago

Did you try this? https://learn.microsoft.com/en-us/uwp/api/windows.applicationmodel.activation.phonecallactivatedeventargs?view=winrt-22621

To use this API, your application needs to declare in its Package.appxmanifest file windows.phonecallactivation as a uap13:Extension category. Otherwise, the application won't be able to be activated to facilitate in-app call progress control UI.