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"/>