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>
以上内容就是解答有关“安卓配置网络权限”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。