第一步:在 AndroidManifest.xml 中添加网络权限
这是最核心的一步,你需要打开你项目中的 这个权限允许你的应用访问网络,无论是 Wi-Fi 还是移动数据。 在 代码解释: 从 Android 9 开始,Google 出于安全考虑,默认禁止应用使用不安全的明文 HTTP 协议进行网络通信,如果你的 App 需要访问的网站是 在 代码解释: 如果你的应用需要根据网络信息(如 Wi-Fi 或基站)来获取用户的大致位置,那么除了 在 由于位置权限是敏感权限,你不能只在 在 假设你的应用需要访问一个 app/src/main/AndroidManifest.xml 文件,并在 <manifest> 标签内添加 <uses-permission>
添加基本的网络访问权限

<manifest> 标签内添加以下代码:<manifest ...>
<!-- 添加这一行 -->
<uses-permission android:name="android.permission.INTERNET" />
<application ...>
...
</application>
</manifest>
<uses-permission>:声明你的应用需要某个特定的权限。android:name="android.permission.INTERNET":这是系统定义的访问网络权限的固定名称。
第二步:处理 Android 9 (Pie, API 28) 及以上版本的明文 HTTP 限制
http 开头的,而不是 https,那么你必须在 AndroidManifest.xml 中显式地声明允许使用明文流量。<application> 标签内添加 android:usesCleartextTraffic 属性:
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:usesCleartextTraffic="true"
...>
...
</application>
</manifest>
android:usesCleartextTraffic="true":告诉系统,你的应用允许在网络上发送和接收未加密的流量(即 HTTP 请求),如果你只访问 https 网站,可以省略此属性,或者将其设为 false 以加强安全性。
第三步:在 Android 10 (API 29) 及以上请求精确位置权限(可选)
INTERNET 权限外,你还必须请求 ACCESS_COARSE_LOCATION 或 ACCESS_FINE_LOCATION 权限,这是 Google 的一项隐私政策要求。添加位置权限
<manifest> 中添加位置权限:<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
<!-- 如果需要基于网络获取大致位置,添加此权限 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 如果需要 GPS 获取精确位置,添加此权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
...
android:usesCleartextTraffic="true"
...>
...
</application>
</manifest>
在运行时请求权限
AndroidManifest.xml 中声明就完事了,还必须在代码中运行时向用户请求。
Activity 中,你可以这样请求:// 在 Activity 的某个方法中,onCreate 或一个按钮的点击事件里
private void requestLocationPermission() {
// 检查是否已经授权
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
// 如果没有授权,则请求权限
// 第一个参数是 Context
// 第二个参数是权限数组(可以一次请求多个)
// 第三个参数是请求码,用于在回调中识别这次请求
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
MY_PERMISSIONS_REQUEST_LOCATION);
}
}
// 重写 onRequestPermissionsResult 方法来处理用户的授权结果
@Override
public void onRequestPermissionsResult(int requestCode,
String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_LOCATION: {
// 如果请求被取消,grantResults 数组为空
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 用户授权了,可以执行需要位置权限的操作
// 获取网络位置
} else {
// 用户拒绝了,可以提示用户该权限的必要性
Toast.makeText(this, "需要位置权限才能获取网络信息", Toast.LENGTH_SHORT).show();
}
return;
}
}
}
// 定义一个常量来作为请求码
private static final int MY_PERMISSIONS_REQUEST_LOCATION = 1;
完整示例
http 网站并且需要基于网络获取位置,你的 AndroidManifest.xml 文件看起来会是这样:<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<!-- 1. 网络权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 2. 基于网络的位置权限 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.MyApp"
<!-- 3. 允许明文 HTTP 流量 (针对 Android 9+) -->
android:usesCleartextTraffic="true">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
AndroidManifest.xml 的 <manifest> 标签下添加 <uses-permission android:name="android.permission.INTERNET" />。http 协议,在 <application> 标签中添加 android:usesCleartextTraffic="true"。<manifest> 下添加 ACCESS_COARSE_LOCATION 权限,并在代码中运行时请求。https 协议,这样可以避免处理明文流量的限制,并保护用户数据安全。
