首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何让WifiManger在API29android中工作

在API 29及更高版本的Android中,WifiManager的一些方法已被弃用或限制,因此需要采取一些额外的步骤来使其在这些版本中正常工作。

以下是在API 29中使WifiManager工作的步骤:

  1. 添加权限:确保在AndroidManifest.xml文件中添加以下权限:
代码语言:txt
复制
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
  1. 使用WifiManager的新方法:在API 29中,WifiManager的一些方法已被弃用,可以使用新的方法来替代。例如,获取WifiManager实例的方法已更改为Context#getSystemService(Context.WIFI_SERVICE),而不是直接调用getSystemService(Context.WIFI_SERVICE)
代码语言:txt
复制
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
  1. 请求位置权限:在API 29中,访问Wi-Fi状态需要位置权限。因此,您需要在运行时请求位置权限。可以使用以下代码请求位置权限:
代码语言:txt
复制
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
}
  1. 处理位置权限回调:在用户授予或拒绝位置权限后,需要处理权限回调。可以使用以下代码处理权限回调:
代码语言:txt
复制
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == 1) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // 用户授予了位置权限,可以执行相关操作
        } else {
            // 用户拒绝了位置权限,需要处理相应逻辑
        }
    }
}
  1. 更新应用的目标SDK版本:如果您的应用的目标SDK版本低于29,可能需要将其更新为29或更高版本。可以在应用的build.gradle文件中进行更新:
代码语言:txt
复制
android {
    compileSdkVersion 29
    defaultConfig {
        targetSdkVersion 29
        // 其他配置项
    }
    // 其他配置项
}

通过以上步骤,您应该能够在API 29及更高版本的Android中使WifiManager正常工作。请注意,这些步骤仅适用于API 29及更高版本,低于API 29的版本可以继续使用原有的WifiManager方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android开发笔记(一百五十八)运行时动态授权管理

App开发过程中,涉及到硬件设备的操作,比如拍照、录音、定位等等,都要在AndroidManifest.xml中声明相关的权限。可是Android系统为了防止某些App滥用权限,从而允许用户在系统设置里面对App禁用某些权限。然而这又带来另一个问题,用户打开App之后,App可能因为权限不足导致无法正常运行,甚至直接崩溃闪退。遇到这种情况,只需用户在系统设置中开启相关权限即可恢复正常,但是用户并非专业的开发者,他怎知要去启用哪些权限呢?再说,每次都要用户亲自打开系统设置页面,再琢磨半天精挑细选那些必须开启的权限,不但劳力而且劳神,这种用户体验实在差劲。 有鉴于此,Android从6.0开始引入了运行时权限管理机制,允许App在运行过程中动态检查是否拥有某项权限,一旦发现缺少某种必需的权限,则系统会自动弹出小窗提示用户去开启该权限。如此这般,一方面开发者无需担心App因权限不足而闪退的问题,另一方面用户也不再头痛是哪个权限被禁止导致App用不了的毛病,这个贴心的动态权限授权功能可谓是皆大欢喜。下面就来看看如何在代码中实现运行时权限管理机制。 首先要检查Android系统是否为6.0及以上版本,因为运行时权限管理机制是6.0才开始支持的功能。其次调用ContextCompat.checkSelfPermission方法,检查检查当前App是否开启了指定的权限。倘若检查结果是尚未开启权限,则再调用ActivityCompat.requestPermissions方法,请求系统弹出开启权限的确认对话框。详细的权限校验代码如下所示:

01

Android中的权限问题

在Android程序中,在执行形如访问网络、读取联系人时都要声明权限,在 Android 系统版本小于6.0时,所有的权限只需要在AndroidManifest文件中声明就可以使用对应的功能了。 但是在Android6.0版本以上,Android将权限分为了普通权限和危险权限,其中普通权限的使用和以前的Android版本一样,直接在AndroidManifest文件中声明就行了,系统会自动帮我们授权,但是危险权限不仅要在AndroidManifest文件中声明,还需要在使用权限的时候通过代码来判断用户授权并且对用户授权的结果进行对应的处理。那么哪些权限是危险权限呢,下面给出了Android所有的危险权限,那么除了下表中的危险权限,其它的权限就都是Android普通权限了:

03
领券