隐私政策提示框内容中的链接使用本地 html 页面地址(androidPrivacy.json中所用)

1、成功截图
在这里插入图片描述
2、androidPrivacy.json文件内容

{
    "version" : "1.0.0",
    "prompt" : "template",
    "title" : "服务协议和隐私政策",
    "message" : "  请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"static\\htmls\\androidPrivacy.html?type=2\">《服务协议》</a>和<a href=\"static\\htmls\\androidPrivacy.html?type=3\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
    "buttonAccept" : "同意并接受",
    "buttonRefuse" : "暂不同意",
    "second" : {
        "title" : "确认提示",
        "message" : "  进入应用前,你需先同意<a href=\"static\\htmls\\androidPrivacy.html?type=2\">《服务协议》</a>和<a href=\"static\\htmls\\androidPrivacy.html?type=3\">《隐私政策》</a>,否则将退出应用。",
        "buttonAccept" : "同意并继续",
        "buttonRefuse" : "退出应用"
    },
    "styles" : {
        "backgroundColor" : "#FFFFFF",
        "borderRadius" : "5px",
        "title" : {
            "color" : "#333333"
        },
        "buttonAccept" : {
            "color" : "#00a381"
        },
        "buttonRefuse" : {
            "color" : "#c8161d"
        }
    }
}

3、androidPrivacy.html文件内容

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>用户协议&隐私政策</title>
		<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport" />
		<style type="text/css">
			* {
				margin: 0;
				padding: 0;
			}
			textarea {
				border: none;
				width: 100vw;
				height: 100vh;
				box-sizing: border-box;
				padding: 20px;
				background-color: #FFFFFF;
				color: #333333;
				font-size: 14px;
				line-height: 20px;
			}
		</style>
	</head>
	<body>
		<textarea disabled="true" id="div"></textarea>
	</body>
</html>
<script type="text/javascript">
	const url = 'https://test.hegao.net/freight/freight/login/getConfig'
	function parseQueryString(url) {
		const urlKey = url.split('?')[1]
		const objKeyValue = {}
		if (!urlKey) return objKeyValue
		const urlObj = urlKey.split('&')
		for (let i = 0; i < urlObj.length; i++) {
			objKeyValue[urlObj[i].split('=')[0]] = decodeURI(urlObj[i].split('=')[1])
		}
		return objKeyValue
	}
	const urlParams = parseQueryString(window.location.href)
	/* url转字符串 */
	const httpRequest = new XMLHttpRequest() //第一步:创建需要的对象
	httpRequest.open('POST', url,
		true) //第二步:打开连接/***发送json格式文件必须设置请求头 ;如下 - */
	httpRequest.setRequestHeader('Content-type',
		'application/json') //设置请求头 注:post方式必须设置请求头(在建立连接后设置请求头
	httpRequest.send(JSON.stringify({
		type: urlParams.type || 3
	})) //发送请求 将json写入send中
	// 获取数据后的处理程序
	httpRequest.onreadystatechange = function() { //请求后的回调接口,可将请求成功后要执行的程序写在其中
		console.log(httpRequest)
		if (httpRequest.readyState == 4 && httpRequest.status == 200) { //验证请求是否发送成功
			const res = JSON.parse(httpRequest.responseText) //获取到服务端返回的数据
			if (res.success) {
				document.getElementById('div').value = res.data.content
			}
		}
	}
</script>

4、文件路径
在这里插入图片描述

5、踩坑说明

  1. 将html文件放入根目录会导致访问不到文件路径。
  2. 将html文件放入webView推荐的本地html目录中,会导致访问不到文件路径。
  3. 直接使用\会导致路径出错,需要转义\\
  4. 在html文件中访问不到/config/config.js全局配置文件,导致不能使用统一配置的请求路径。
  5. 引用不到全局封装的请求方法,导致只能使用ajax请求数据
`androidprivacy.json` 是Android 12及以上版本引入的一种隐私感知配置文件,用于控制应用访问用户设备敏感权限的行为。这个文件允许开发者声明哪些功能需要访问特定隐私数据,并提供一种机制让用户更了解并管理他们的数据。 如果你遇到`androidprivacy.json` 配置了本地文件读取权限,但是尝试从本地文件系统加载内容时跳转无效,这可能是由于以下几个原因: 1. **配置错误**:确认`androidprivacy.json` 对于读取文件的配置是否正确设置了`<data>`标签,包括正确的`path`、`read`权限以及`source`(如`EXTERNAL_STORAGE`)。 ```json { "features": [ { "id": "com.example.read_file", "description": "Reads a file from external storage.", "data": [ { "type": "file", "path": "/path/to/file.txt", "permissions": ["READ"], "sources": ["EXTERNAL_STORAGE"] } ] } ] } ``` 2. **权限检查**:在运行时,应用需要通过`checkSelfPermission()`检查对应权限,并在必要时请求用户授权。如果没有获得相应的`ACCESS_EXTERNAL_STORAGE`权限,文件操作会失败。 3. **文件路径问题**:确认应用可以访问指定的文件路径,如果文件位于安全沙箱外部,可能需要特殊处理。 4. **API限制**:从Android 13开始,某些文件访问可能会受到API级别的限制,确保你在合适的地方使用这些函数(比如`Environment.getExternalStorageDirectory()`)。 如果遇到以上问题,你应该检查你的代码逻辑,确保权限管理和文件路径设置无误,并在适当地处理权限请求。如果还有疑问,可以查看Android官方文档或者使用`adb logcat` 查看相关的日志信息。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值