如何配置安卓设备的网络权限?

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>

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