0

I am trying to create an android Wi-Fi Display (Miracast) application.

I use following codes to register a sink port:

Class clsWifiP2pManager = Class.forName("android.net.wifi.p2p.WifiP2pManager");
Method methodSetWFDInfo = clsWifiP2pManager.getMethod("setWFDInfo",
                            WifiP2pManager.Channel.class, clsWifiP2pWfdInfo, WifiP2pManager.ActionListener.class);
methodSetWFDInfo.invoke(wifiP2pManager, channel, wifiP2pWfdInfo, listener);

but when the app is running, throws some exceptions:

W/System.err: java.lang.reflect.InvocationTargetException
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
...
W/System.err: Caused by: java.lang.SecurityException: Wifi Display Permission denied for uid = 10055
W/System.err:     at android.os.Parcel.createException(Parcel.java:1953)
W/System.err:     at android.os.Parcel.readException(Parcel.java:1921)
W/System.err:     at android.os.Parcel.readException(Parcel.java:1871)
W/System.err:     at android.net.wifi.p2p.IWifiP2pManager$Stub$Proxy.checkConfigureWifiDisplayPermission(IWifiP2pManager.java:205)
W/System.err:     at android.net.wifi.p2p.WifiP2pManager.setWFDInfo(WifiP2pManager.java:1391)
W/System.err:   ... 21 more

i know that there have checkConfigureWifiDisplayPermission() in setWFDInfo(), it will check if my app have the system app permission: android.permission.CONFIGURE_WIFI_DISPLAY , but this app is not a system app, so how could i avoid the permission checking or avoid the exception: InvocationTargetException ?

by the way, i have already add this permission in my AndroidManifest.xml:

    <uses-feature android:name="android.hardware.wifi" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION"/>
dawenwhen
  • 1
  • 2

1 Answers1

0

Did you declare these permissions in the manifest:

<uses-feature android:name="android.hardware.wifi" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />    
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
Manoj Kumar
  • 332
  • 1
  • 7
  • oh, i didn't add `android.hardware.wifi` permission in manifest, but last permission that i have already add those permission in my project, is my fault that i forget to add a statement to the problem.I have make an edit. And after i added the permission `android.hardware.wifi` , i only got `InvocationTargetException` and `SecurityException` exceptions. – dawenwhen May 10 '22 at 10:04