Android 6.0 wifi一个LOST_PROVISIONING断开连接的问题

Android6.0系统设置wifi修改保持连接了,但是偶尔会断开连接。查看log,发现如下内容:

04-09 15:09:27.569  2181 22861 D NetlinkSocketObserver: NeighborEvent{elapsedMs=2512360, 192.168.1.1, [(null)], RTM_NEWNEIGH, NUD_FAILED}
04-09 15:09:27.569  2181 22861 W NetlinkSocketObserver: ALERT: NeighborEvent{elapsedMs=2512360, 192.168.1.1, [(null)], RTM_NEWNEIGH, NUD_FAILED}
04-09 15:09:27.569  2181 22861 W IpReachabilityMonitor: FAILURE: LOST_PROVISIONING, NeighborEvent{elapsedMs=2512360, 192.168.1.1, [(null)], RTM_NEWNEIGH, NUD_FAILED}
04-09 15:09:27.584  2181  2784 D IpReachabilityMonitor: clear: iface{wlan0/9}, v{4}, ntable=[]
04-09 15:09:27.593  2947  2947 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid=d0:c7:c0:d3:a0:e6 reason=3 locally_generated=1

04-09 15:09:27.598  2181  2784 D WifiStateMachine: WifiStateMachine: Leaving Connected state

Adnroid6.0以上系统存在Android- IP LOST_PROVISIONING 的机制

可以在android\frameworks\opt\net\wifi\service\java\com\android\server\wifi\WifiStateMachine.java中屏蔽mIpReachabilityMonitor来解决。

            mIpReachabilityMonitor = null;
/*try {
                mIpReachabilityMonitor = new IpReachabilityMonitor(
                        mContext,
                        mInterfaceName,
                        new IpReachabilityMonitor.Callback() {
                            @Override
                            public void notifyLost(InetAddress ip, String logMsg) {
                                sendMessage(CMD_IP_REACHABILITY_LOST, logMsg);
                            }
                        });
            } catch (IllegalArgumentException e) {
                Log.wtf("Failed to create IpReachabilityMonitor", e);
            }*/


--------------------- 
作者:qq503393230 
来源:优快云 
原文:https://blog.youkuaiyun.com/qq503393230/article/details/79894464 
版权声明:本文为博主原创文章,转载请附上博文链接!

<think>好的,我需要帮助用户了解在Android 13中如何为第三方应用添加DISPATCH_PROVISIONING_MESSAGE权限。首先,我需要确认这个权限的具体信息。根据用户提到的引用内容,权限的配置通常涉及AndroidManifest.xml中的声明和使用。 DISPATCH_PROVISIONING_MESSAGE权限可能是一个系统权限或者签名权限,因为Android中的某些高级权限需要特定的保护级别。根据引用[1],android:protectionLevel决定了权限的使用方式,特别是在Android 6.0+的动态权限管理中。因此,我需要检查这个权限的保护级别是否为signature或privileged,这会影响第三方应用是否能直接声明和使用它。 接下来,用户可能需要在AndroidManifest.xml中添加权限声明。通常,使用<uses-permission>标签,但如果权限是系统或签名级别,普通应用可能无法直接获得。如果是签名权限,应用需要使用与系统相同的签名,这对于第三方应用来说通常不可行。因此,可能需要寻找其他方法,如成为特权应用或与设备制造商合作。 此外,用户可能需要动态请求权限,尽管对于系统权限,动态请求可能无效。需要查阅Android 13的官方文档,确认DISPATCH_PROVISIONING_MESSAGE权限的具体保护级别和使用条件。如果该权限属于危险权限,可能需要运行时请求;如果是正常权限,只需在清单中声明即可。 最后,用户可能需要处理权限未授予的情况,确保应用在缺少权限时优雅降级。需要编写相应的代码检查权限状态,并在必要时提示用户或调整功能。同时,测试在不同设备上的兼容性也很重要,因为厂商可能有不同的实现。 总结步骤:确认权限保护级别,修改清单文件,处理动态请求(如果适用),测试和适配。需要提醒用户,某些权限可能无法被第三方应用获取,除非有特殊权限或系统签名。</think>在Android 13中为第三方应用配置`DISPATCH_PROVISIONING_MESSAGE`权限,需要遵循以下步骤: ### 1. **确认权限属性** 该权限属于系统级权限,定义在`android.Manifest.permission`中,其保护级别为`signature|privileged`[^1],意味着需要满足以下条件之一: - 应用需与系统签名一致(系统应用) - 应用需放置在`/system/priv-app`目录(特权应用) ### 2. **声明权限** 在`AndroidManifest.xml`中添加以下声明: ```xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.yourapp"> <!-- 声明权限使用 --> <uses-permission android:name="android.permission.DISPATCH_PROVISIONING_MESSAGE"/> <!-- 如果是自定义权限需定义,但系统权限无需重复定义 --> </manifest> ``` ### 3. **权限申请限制** 由于该权限的保护级别为`signature|privileged`,普通第三方应用**无法直接获取**。需通过以下方式实现: - **系统应用**:使用与设备系统相同的签名证书编译应用 - **特权应用**:将应用预置到设备的`/system/priv-app`目录(需Root或厂商合作) ### 4. **动态请求权限(可选)** 对于非特权应用,即使声明权限也会被系统自动拒绝。若拥有特权身份,可添加权限检查: ```kotlin if (ContextCompat.checkSelfPermission( this, Manifest.permission.DISPATCH_PROVISIONING_MESSAGE ) != PackageManager.PERMISSION_GRANTED) { // 处理无权限情况 } ``` ### 5. **厂商适配建议** 与设备制造商合作,通过以下方式实现: - **定制ROM**:将应用集成到系统镜像中 - **白名单机制**:厂商在框架层为特定包名授权该权限 ### 6. **备选方案** 如果无法获得权限,可考虑使用Android Enterprise API或设备策略控制器(DPC)的合法接口实现类似功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值