今天用flutter打了一个release版本的正式包,但是安装到真机上发现却无法访问网络。各个接口都不通,连登陆页面都进不去。
在网上查找搜索了一些资料,发现问题所在,安卓开发中flutter应用没有网络权限。
在路径android/src/main/AndroidManifest.xml,在AndroidManifest.xml文件的manifest标签下加入以下代码,注意不要放到application里.:
<!-- 访问电话状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 允许全部网络访问 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 获取网络信息状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 获取当前WiFi接入的状态以及WLAN热点的信息 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 获取当前设备存储权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
添加配置之后
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.fushikang_flutter">
<application
android:name="io.flutter.app.FlutterApplication"
android:label="Flutter"
android:icon="@mipmap/ic_launcher">
...
</application>
<!-- 访问电话状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 允许全部网络访问 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 获取网络信息状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 获取当前WiFi接入的状态以及WLAN热点的信息 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 获取当前设备存储权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>
在这个文件里,android\app\src\profile\AndroidManifest.xml, 添加之后
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.fushikang_flutter">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<!-- 访问电话状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 允许全部网络访问 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 获取网络信息状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 获取当前WiFi接入的状态以及WLAN热点的信息 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 获取当前设备存储权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>
但是请注意,重新打包后真机还是无法请求网络数据
然后继续找,结果发现~~~
在项目中android\app\src\profile\AndroidManifest.xml,也有一个AndroidManifest.xml文件,同样的在 manifest 标签里添加这几段代码:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.fushikang_flutter">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<!-- 访问电话状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 允许全部网络访问 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 获取网络信息状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 获取当前WiFi接入的状态以及WLAN热点的信息 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 获取当前设备存储权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>
在这个文件中可能默认会有这个代码,我们覆盖就行
<uses-permission android:name="android.permission.INTERNET" />
最后重新打包,真机安装,ok可以正常访问网络数据了