/** * 权限检查和引导工具 * 专门用于检查Android设备的网络和位置权限 */ /** * 检查网络相关权限 */ export async function checkNetworkPermissions() { console.log('🔍 开始检查网络权限...') const permissionStatus = { location: null, wifi: null, network: null, recommendations: [] } try { // 检查位置权限 permissionStatus.location = await checkLocationPermission() // 检查WiFi信息获取能力 permissionStatus.wifi = await checkWifiInfoAccess() // 检查网络连接状态 permissionStatus.network = await checkNetworkAccess() // 生成权限建议 permissionStatus.recommendations = generatePermissionRecommendations(permissionStatus) } catch (error) { console.error('❌ 权限检查异常:', error) permissionStatus.error = error } return permissionStatus } /** * 检查位置权限 */ async function checkLocationPermission() { try { const result = await new Promise((resolve) => { uni.getLocation({ type: 'wgs84', success: (res) => { console.log('✅ 位置权限正常') resolve({ granted: true, message: '位置权限已授权' }) }, fail: (err) => { console.log('❌ 位置权限被拒绝:', err.errMsg) resolve({ granted: false, message: err.errMsg, error: err }) } }) }) return result } catch (error) { return { granted: false, message: '位置权限检查失败', error } } } /** * 检查WiFi信息获取能力 */ async function checkWifiInfoAccess() { try { const result = await new Promise((resolve) => { uni.getConnectedWifi({ success: (res) => { console.log('✅ WiFi信息获取正常:', res.SSID) resolve({ accessible: true, ssid: res.SSID, bssid: res.BSSID, message: `已连接WiFi: ${res.SSID}` }) }, fail: (err) => { console.log('❌ WiFi信息获取失败:', err.errMsg) resolve({ accessible: false, message: err.errMsg, error: err }) } }) }) return result } catch (error) { return { accessible: false, message: 'WiFi信息检查失败', error } } } /** * 检查网络连接状态 */ async function checkNetworkAccess() { try { const networkType = await uni.getNetworkType() console.log(`📶 网络类型: ${networkType.networkType}`) console.log(`🔗 连接状态: ${networkType.isConnected ? '已连接' : '未连接'}`) // 测试实际网络连接 const internetTest = await testInternetConnection() return { type: networkType.networkType, connected: networkType.isConnected, internetAccess: internetTest.success, message: `网络: ${networkType.networkType}, 连接: ${networkType.isConnected ? '是' : '否'}, 互联网: ${internetTest.success ? '正常' : '异常'}` } } catch (error) { return { type: 'unknown', connected: false, internetAccess: false, message: '网络状态检查失败', error } } } /** * 测试互联网连接 */ async function testInternetConnection() { try { const result = await new Promise((resolve) => { uni.request({ url: 'https://www.baidu.com', method: 'HEAD', timeout: 3000, success: () => { resolve({ success: true }) }, fail: (err) => { resolve({ success: false, error: err.errMsg }) } }) }) return result } catch (error) { return { success: false, error: error.message } } } /** * 生成权限建议 */ function generatePermissionRecommendations(status) { const recommendations = [] // 位置权限建议 if (!status.location?.granted) { recommendations.push({ type: 'location', priority: 'high', title: '需要开启位置权限', description: 'Android 13+获取WiFi信息必须有位置权限', actions: [ '打开手机设置 → 应用管理 → StillSense', '点击权限管理 → 位置信息', '选择"仅在使用中允许"' ] }) } // WiFi信息访问建议 if (!status.wifi?.accessible) { recommendations.push({ type: 'wifi', priority: 'high', title: '无法获取WiFi信息', description: '可能被小米手机的隐私保护限制', actions: [ '打开设置 → 隐私保护 → 权限管理', '找到局域网访问 → StillSense → 允许', '关闭"局域网设备防追踪"功能' ] }) } // 网络连接建议 if (!status.network?.internetAccess) { recommendations.push({ type: 'network', priority: 'medium', title: '网络连接异常', description: '无法访问互联网,可能影响局域网功能', actions: [ '检查WiFi连接是否正常', '尝试重新连接WiFi', '检查是否需要WiFi认证' ] }) } // 小米手机特殊建议 const systemInfo = uni.getSystemInfoSync() if (systemInfo.brand?.toLowerCase().includes('xiaomi') || systemInfo.brand?.toLowerCase().includes('redmi')) { recommendations.push({ type: 'xiaomi', priority: 'high', title: '小米手机特殊设置', description: '小米MIUI需要额外的权限设置', actions: [ '设置 → 省电与电池 → 关闭省电模式', '或将APP添加到省电白名单', '设置 → 隐私保护 → 防追踪 → 关闭局域网设备防追踪' ] }) } return recommendations } /** * 显示权限设置指南 */ export function showPermissionGuide(recommendations) { if (recommendations.length === 0) { uni.showToast({ title: '权限检查通过', icon: 'success' }) return } // 构建指南内容 let guideContent = '📱 权限设置指南:\n\n' recommendations.forEach((rec, index) => { guideContent += `${index + 1}. ${rec.title}\n` guideContent += `${rec.description}\n` if (rec.actions.length > 0) { guideContent += '操作步骤:\n' rec.actions.forEach(action => { guideContent += `• ${action}\n` }) } guideContent += '\n' }) uni.showModal({ title: '权限设置指南', content: guideContent, confirmText: '我知道了', success: (res) => { if (res.confirm) { console.log('📋 权限设置指南已显示') } } }) } /** * 一键权限检查和指导 */ export async function runPermissionDiagnosis() { console.log('🔍 开始权限诊断...') uni.showLoading({ title: '检查权限中...' }) try { const status = await checkNetworkPermissions() uni.hideLoading() console.log('📋 权限检查结果:', status) if (status.recommendations.length > 0) { showPermissionGuide(status.recommendations) } else { uni.showToast({ title: '权限设置正常', icon: 'success' }) } return status } catch (error) { uni.hideLoading() console.error('❌ 权限诊断异常:', error) uni.showToast({ title: '权限检查失败', icon: 'none' }) return null } } export default { checkNetworkPermissions, showPermissionGuide, runPermissionDiagnosis }