Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android wifiManager.startScan()返回false_Android_Kotlin_Wifi_Android Wifi_Wifimanager - Fatal编程技术网

Android wifiManager.startScan()返回false

Android wifiManager.startScan()返回false,android,kotlin,wifi,android-wifi,wifimanager,Android,Kotlin,Wifi,Android Wifi,Wifimanager,不知道为什么我的代码从一个复制到另一个不起作用。 在获取接收可用Wifi列表的结果时,我从scanFailure()函数中得到toast通信错误。我的Api级别需要我声明的权限,因此我满足所有要求 添加新设备片段 class AddNewDeviceFragment : Fragment() { private lateinit var wifiManager: WifiManager private var adapter: NewDeviceAdapter = NewDev

不知道为什么我的代码从一个复制到另一个不起作用。 在获取接收可用Wifi列表的结果时,我从scanFailure()函数中得到toast通信错误。我的Api级别需要我声明的权限,因此我满足所有要求

添加新设备片段

class AddNewDeviceFragment : Fragment() {

    private lateinit var wifiManager: WifiManager
    private var adapter: NewDeviceAdapter = NewDeviceAdapter(arrayListOf())
    private lateinit var model: NewDeviceViewModel
    private lateinit var rootView: View

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        rootView = inflater.inflate(R.layout.fragment_addnewdevice, container, false)

        return rootView
    }

    override fun onStart() {
        super.onStart()

        var newDevicesRecycledView = rootView.findViewById(R.id.newDevicesRecycledView) as RecyclerView
        newDevicesRecycledView.layoutManager = LinearLayoutManager(activity)
        newDevicesRecycledView.adapter = adapter

        //ViewModel
        model = ViewModelProviders.of(this).get(NewDeviceViewModel::class.java)

        //LiveData
        model.getNewDevices()
            .observe(viewLifecycleOwner, Observer<MutableList<NewDevice>> { newDevices ->
                adapter.addDevice(newDevices)
            })
        swipeRefreshLayout.setOnRefreshListener { startScan() }
    }

    fun startScan() {
        swipeRefreshLayout.isRefreshing = true

        wifiManager = context?.getSystemService(Context.WIFI_SERVICE) as WifiManager


        if (!wifiManager.isWifiEnabled) {
            Toast.makeText(activity, "Wifi is disable... We need to enable it", Toast.LENGTH_LONG).show()
            wifiManager.setWifiEnabled(true)
        }

        val wifiScanReceiver = object : BroadcastReceiver() {

            override fun onReceive(context: Context, intent: Intent) {
                val success = intent.getBooleanExtra(WifiManager.EXTRA_RESULTS_UPDATED, false)
                if (success) {
                    scanSuccess()
                } else {
                    scanFailure()
                }
            }
        }

        val intentFilter = IntentFilter()
        intentFilter.addAction("android.net.wifi.SCAN_RESULTS")
        context?.registerReceiver(wifiScanReceiver, intentFilter)

        val success = wifiManager.startScan()
        if (!success) {
            // scan failure handling
            scanFailure()
        }
        swipeRefreshLayout.isRefreshing = false
    }

    private fun scanSuccess() {
        model.clearAllData()

        val results = wifiManager.scanResults
        for (result in results) {
            model.addNewDevice(NewDevice(result.SSID.toString()))
        }
    }

    private fun scanFailure() {
        Toast.makeText(activity,"Error while scanning WiFi",Toast.LENGTH_LONG).show()
    }
}

<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.example.lightmeup">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

    <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher"
            android:supportsRtl="true"
            android:theme="@style/AppTheme"
            tools:ignore="GoogleAppIndexingWarning">
        <activity android:name=".MainActivity"
        android:theme="@style/AppTheme.NoActionBar"
        android:screenOrientation="portrait">

        </activity>
        <activity
                android:name=".LoginActivity"
                android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

</manifest>
class AddNewDeviceFragment:Fragment(){
私有lateinit变量wifiManager:wifiManager
专用var适配器:NewDeviceAdapter=NewDeviceAdapter(arrayListOf())
私有lateinit var模型:NewDeviceViewModel
私有lateinit var rootView:视图
覆盖创建视图(充气机:布局充气机,容器:ViewGroup?,savedInstanceState:Bundle?):视图{
rootView=充气机。充气(R.layout.fragment\u addnewdevice,container,false)
返回根视图
}
覆盖有趣的onStart(){
super.onStart()
var newDevicesRecycledView=rootView.findViewById(R.id.newDevicesRecycledView)作为RecyclerView
newDevicesRecycledView.layoutManager=LinearLayoutManager(活动)
newDevicesRecycledView.adapter=适配器
//视图模型
model=ViewModelProviders.of(this.get)(NewDeviceViewModel::class.java)
//实时数据
model.getNewDevices()
.观察(viewLifecycleOwner,观察者{newDevices->
adapter.addDevice(新设备)
})
swipeRefreshLayout.setOnRefreshListener{startScan()}
}
乐趣之星{
swipeRefreshLayout.isRefreshing=true
wifiManager=context?.getSystemService(context.WIFI_服务)作为wifiManager
如果(!wifiManager.isWifiEnabled){
Toast.makeText(活动,“Wifi被禁用…我们需要启用它”,Toast.LENGTH\u LONG.show()
wifiManager.setWifiEnabled(true)
}
val wifiScanReceiver=对象:BroadcastReceiver(){
覆盖接收(上下文:上下文,意图:意图){
val success=intent.getBooleanExtra(WifiManager.EXTRA_结果_更新,false)
如果(成功){
scansucture()
}否则{
扫描失败()
}
}
}
val intentFilter=intentFilter()
intentFilter.addAction(“android.net.wifi.SCAN\u结果”)
上下文?.registerReceiver(wifiScanReceiver,intentFilter)
val success=wifiManager.startScan()
如果(!成功){
//扫描失败处理
扫描失败()
}
swipeRefreshLayout.isRefreshing=false
}
私人娱乐与成功(){
model.clearAllData()
val results=wifiManager.scanResults
for(结果中的结果){
model.addNewDevice(NewDevice(result.SSID.toString()))
}
}
私人娱乐失败(){
Toast.makeText(活动,“扫描WiFi时出错”,Toast.LENGTH\u LONG.show())
}
}
清单

class AddNewDeviceFragment : Fragment() {

    private lateinit var wifiManager: WifiManager
    private var adapter: NewDeviceAdapter = NewDeviceAdapter(arrayListOf())
    private lateinit var model: NewDeviceViewModel
    private lateinit var rootView: View

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        rootView = inflater.inflate(R.layout.fragment_addnewdevice, container, false)

        return rootView
    }

    override fun onStart() {
        super.onStart()

        var newDevicesRecycledView = rootView.findViewById(R.id.newDevicesRecycledView) as RecyclerView
        newDevicesRecycledView.layoutManager = LinearLayoutManager(activity)
        newDevicesRecycledView.adapter = adapter

        //ViewModel
        model = ViewModelProviders.of(this).get(NewDeviceViewModel::class.java)

        //LiveData
        model.getNewDevices()
            .observe(viewLifecycleOwner, Observer<MutableList<NewDevice>> { newDevices ->
                adapter.addDevice(newDevices)
            })
        swipeRefreshLayout.setOnRefreshListener { startScan() }
    }

    fun startScan() {
        swipeRefreshLayout.isRefreshing = true

        wifiManager = context?.getSystemService(Context.WIFI_SERVICE) as WifiManager


        if (!wifiManager.isWifiEnabled) {
            Toast.makeText(activity, "Wifi is disable... We need to enable it", Toast.LENGTH_LONG).show()
            wifiManager.setWifiEnabled(true)
        }

        val wifiScanReceiver = object : BroadcastReceiver() {

            override fun onReceive(context: Context, intent: Intent) {
                val success = intent.getBooleanExtra(WifiManager.EXTRA_RESULTS_UPDATED, false)
                if (success) {
                    scanSuccess()
                } else {
                    scanFailure()
                }
            }
        }

        val intentFilter = IntentFilter()
        intentFilter.addAction("android.net.wifi.SCAN_RESULTS")
        context?.registerReceiver(wifiScanReceiver, intentFilter)

        val success = wifiManager.startScan()
        if (!success) {
            // scan failure handling
            scanFailure()
        }
        swipeRefreshLayout.isRefreshing = false
    }

    private fun scanSuccess() {
        model.clearAllData()

        val results = wifiManager.scanResults
        for (result in results) {
            model.addNewDevice(NewDevice(result.SSID.toString()))
        }
    }

    private fun scanFailure() {
        Toast.makeText(activity,"Error while scanning WiFi",Toast.LENGTH_LONG).show()
    }
}

<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.example.lightmeup">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

    <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher"
            android:supportsRtl="true"
            android:theme="@style/AppTheme"
            tools:ignore="GoogleAppIndexingWarning">
        <activity android:name=".MainActivity"
        android:theme="@style/AppTheme.NoActionBar"
        android:screenOrientation="portrait">

        </activity>
        <activity
                android:name=".LoginActivity"
                android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

</manifest>


检查是否通过设置启用了位置,以及是否授予了权限。在您共享的链接中,也阅读了我检查过的同一篇文章。位置已启用且权限已授予:/Logcat中是否有日志?