当我运行脚本“WifiManager.isWifiEnable”
时,我的即时应用程序崩溃 Caused by: java.lang.SecurityException: Method class android.net.wifi.IWifiManager$Stub$Proxy.getWifiEnabledState[] not available to instant apps
at android.os.Parcel.readException(Parcel.java:1620)
at android.os.Parcel.readException(Parcel.java:1573)
at com.google.android.instantapps.supervisor.ipc.base.MethodInvocationProxy.readReply(MethodInvocationProxy.java:238)
at com.google.android.instantapps.supervisor.ipc.base.MethodInvocationProxy.invoke(MethodInvocationProxy.java:472)
at java.lang.reflect.Proxy.invoke(Proxy.java:393)
at $Proxy15.getWifiEnabledState(Unknown Source)
at android.net.wifi.WifiManager.getWifiState(WifiManager.java:1459)
at android.net.wifi.WifiManager.isWifiEnabled(WifiManager.java:1471)
答案 0 :(得分:1)
这是预期的,因为Instant Apps是沙盒,无法访问设备的全部功能(例如,没有读/写)。您必须根据whether or not you're an Instant App解决此问题。以下是available permissions的完整列表:
PS:ADB做了一个really cool episode,讨论了Instant Apps如何工作(以及沙盒)。
另见:https://github.com/googlesamples/android-instant-apps/issues/12
答案 1 :(得分:1)
<强> WifiManager
强>
此类提供用于管理Wi-Fi连接的所有方面的主要API。
它定义了在Wi-Fi状态的任何变化时广播的各种Intent动作的名称。
必须使用Context.getSystemService(Class)
使用参数WifiManager.class
或Context.getSystemService(String)
并使用参数 Context.WIFI_SERVICE
获取此类的实例。
setWifiEnabled
需要 CHANGE_WIFI_STATE
这是执行Wi-Fi特定操作时使用的API。要在抽象级别执行与网络连接相关的操作,请使用 ConnectivityManager
。
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
您需要:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
我们只能使用限制为Instant permissions
的API方法