如何配置安卓设备的网络权限?
1、网络权限设置
基础网络权限:在 AndroidManifest.xml 文件中添加以下代码来声明网络权限:
<uses-permission android:name="android.permission.INTERNET" />
其他相关权限:根据应用需求,可能还需要声明其他相关权限,例如访问网络状态和 Wi-Fi 状态的权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
2、网络安全策略配置
Android API 30及更高版本:从 Android API 30(Android 11)开始,Google 引入了更严格的网络安全策略,如果应用程序需要发送明文流量的网络请求,需要在清单文件中进行额外配置:
<application android:usesCleartextTraffic="true" ...> ... </application>
networkSecurityConfig 文件:可以通过在 res/xml/network_security_config.xml 文件中配置网络安全策略,并在清单文件中引用该配置文件:
<network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">com.xxx</domain> </domain-config> </network-security-config>
然后在 AndroidManifest.xml 中引用:
<application android:networkSecurityConfig="@xml/network_security_config" ...> ... </application>
3、动态权限申请(Android 6.0及以上版本)
运行时权限申请:从 Android 6.0(API 级别 23)开始,用户需要在应用运行时授予某些敏感权限,尽管网络权限通常不需要动态申请,但了解其机制仍然重要,访问网络状态需要在运行时检查并申请权限:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_NETWORK_STATE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_NETWORK_STATE}, REQUEST_CODE); }
4、代码示例
网络请求示例:以下是一个使用 AsyncTask 进行网络请求的简单示例:
import android.os.AsyncTask; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class NetworkRequestTask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... urls) { String result = null; try { URL url = new URL(urls[0]); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); InputStream inputStream = connection.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); StringBuilder stringBuilder = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { stringBuilder.append(line); } result = stringBuilder.toString(); reader.close(); inputStream.close(); connection.disconnect(); } catch (IOException e) { Log.e("NetworkRequestTask", "Error: " + e.getMessage()); } return result; } @Override protected void onPostExecute(String result) { if (result != null) { Log.d("NetworkRequestTask", "Response: " + result); } } }
相关问题与解答
问题1:如何在 AndroidManifest.xml 中声明网络权限?
答:在 AndroidManifest.xml 文件中,通过添加<uses-permission>
标签来声明网络权限。
<uses-permission android:name="android.permission.INTERNET" />
还可以声明其他相关权限,如访问网络状态和 Wi-Fi 状态的权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
问题2:如何配置 Android 应用以允许明文 HTTP 请求?
答:从 Android 9(API 级别 28)开始,默认情况下只允许加密的流量(HTTPS),如果需要允许明文 HTTP 请求,可以在 AndroidManifest.xml 文件中的 application 节点下添加配置项:
<application android:usesCleartextTraffic="true" ...> </application>
或者,通过在 res/xml/network_security_config.xml 中配置网络安全策略,并在清单文件中引用该配置文件:
<network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">com.xxx</domain> </domain-config> </network-security-config>
然后在 AndroidManifest.xml 中引用:
<application android:networkSecurityConfig="@xml/network_security_config" ...> </application>
以上内容就是解答有关“安卓配置网络权限”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。