使用 WiFi 的 Instant App 崩溃
Instant App crash using WiFi
当我 运行 脚本“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)
这是预料之中的,因为即时应用程序是沙盒化的,无法访问设备的全部功能(例如 read/write)。您必须根据 whether or not you're an Instant App. Here's the full list of available permissions:
解决此问题
- 结算
- ACCESS_COARSE_LOCATION
- ACCESS_FINE_LOCATION
- ACCESS_NETWORK_STATE
- 相机
- INSTANT_APP_FOREGROUND_SERVICE 仅在 Android 8.0.
- 互联网
- READ_PHONE_NUMBERS。此权限仅在 Android 8.0(API 级别 26)中可用。
- RECORD_AUDIO
- 震动
PS:ADB 做了一个 really cool episode 他们讨论了 Instant Apps 的工作原理(和沙盒)。
另见:https://github.com/googlesamples/android-instant-apps/issues/12
WifiManager
此 class 提供主要 API 用于管理 Wi-Fi 连接的所有方面。
它定义了在 Wi-Fi 状态发生任何变化时广播的各种 Intent 动作的名称。
class 的实例必须使用带有参数 WifiManager.class
的 Context.getSystemService(Class)
或带有参数 Context.WIFI_SERVICE
的 Context.getSystemService(String)
获得。
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" />
我们只能使用 API 限制 With Instant permissions
的方法
- 计费
- ACCESS_COARSE_LOCATION
- ACCESS_FINE_LOCATION
- ACCESS_NETWORK_STATE
- 相机
- INSTANT_APP_FOREGROUND_SERVICE 仅在 Android 8.0 中。
- 互联网 READ_PHONE_NUMBERS。这个权限是
仅在 Android 8.0(API 级别 26)中可用。
- RECORD_AUDIO 振动
当我 运行 脚本“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)
这是预料之中的,因为即时应用程序是沙盒化的,无法访问设备的全部功能(例如 read/write)。您必须根据 whether or not you're an Instant App. Here's the full list of available permissions:
解决此问题- 结算
- ACCESS_COARSE_LOCATION
- ACCESS_FINE_LOCATION
- ACCESS_NETWORK_STATE
- 相机
- INSTANT_APP_FOREGROUND_SERVICE 仅在 Android 8.0.
- 互联网
- READ_PHONE_NUMBERS。此权限仅在 Android 8.0(API 级别 26)中可用。
- RECORD_AUDIO
- 震动
PS:ADB 做了一个 really cool episode 他们讨论了 Instant Apps 的工作原理(和沙盒)。
另见:https://github.com/googlesamples/android-instant-apps/issues/12
WifiManager
此 class 提供主要 API 用于管理 Wi-Fi 连接的所有方面。
它定义了在 Wi-Fi 状态发生任何变化时广播的各种 Intent 动作的名称。
class 的实例必须使用带有参数 WifiManager.class
的 Context.getSystemService(Class)
或带有参数 Context.WIFI_SERVICE
的 Context.getSystemService(String)
获得。
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" />
我们只能使用 API 限制 With Instant permissions
的方法- 计费
- ACCESS_COARSE_LOCATION
- ACCESS_FINE_LOCATION
- ACCESS_NETWORK_STATE
- 相机
- INSTANT_APP_FOREGROUND_SERVICE 仅在 Android 8.0 中。
- 互联网 READ_PHONE_NUMBERS。这个权限是 仅在 Android 8.0(API 级别 26)中可用。
- RECORD_AUDIO 振动