Android之安卓8.0版本以上手机开启热点提示Caller already has an active LocalOnlyHotspot request

1 问题

在Android8.0手机开启了热点,关闭页面再次打开热点,

 /**
     * 开启Android8.0版本手机以上的热点,热点名字和密码都是随机的。
     */
    fun initWifiApGreaterThanEight(context: Context) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            var wifiManager:WifiManager = getApplicationContext().getSystemService(Context.WIFI_SERVICE) as WifiManager
            try {
                wifiManager.startLocalOnlyHotspot(object : WifiManager.LocalOnlyHotspotCallback(){
                    override fun onStarted(reservation: WifiManager.LocalOnlyHotspotReservation?) {
                        super.onStarted(reservation)
                        Log.i(TAG, "uild.VERSION.SDK_INT >= Build.VERSION_CODES.O initWifiAp onStarted");
                        reserva = reservation
                        var wifiConfiguration = reservation!!.wifiConfiguration
                        var ssid = wifiConfiguration.SSID;
                        var password = wifiConfiguration.preSharedKey
                        Log.i(TAG, "ssid is:" + ssid + "password is:" + password);
                        //创建成功,然后开辟线程,启动服务
                        Thread(HttpServerThread(context)).start()
                        setViewWifiApName(ssid)
                        setViewWifiApPassword(password)
//                        connectWifiQRCode(ssid, password);
                    }

                    override fun onStopped() {
                        super.onStopped()
                        Log.i(TAG, "uild.VERSION.SDK_INT >= Build.VERSION_CODES.O initWifiAp onStopped");
                    }

                    override fun onFailed(reason: Int) {
                        super.onFailed(reason)
                        Log.i(TAG, "uild.VERSION.SDK_INT >= Build.VERSION_CODES.O initWifiAp onFailed and reason isL" + reason);
                        openWifiAPFail()
                    }
                }, handler)
            } catch (e: Exception) {
                e.printStackTrace();
                Log.i(TAG, "open wifi Ap fail")
                openWifiAPFail()
            }
        }
    }

提示错误如下

04-24 13:31:17.521  5570  5570 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.appsinnova.android.keepshare/com.appsinnova.android.keepshare.invitation.WifiShareActivity}: java.lang.IllegalStateException: Caller already has an active LocalOnlyHotspot request
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3187)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3324)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:113)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:71)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2050)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at android.os.Handler.dispatchMessage(Handler.java:106)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at android.os.Looper.loop(Looper.java:226)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at android.app.ActivityThread.main(ActivityThread.java:7223)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at java.lang.reflect.Method.invoke(Native Method)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:576)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:961)
04-24 13:31:17.521  5570  5570 E AndroidRuntime: Caused by: java.lang.IllegalStateException: Caller already has an active LocalOnlyHotspot request
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at android.os.Parcel.createException(Parcel.java:1974)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at android.os.Parcel.readException(Parcel.java:1934)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at android.os.Parcel.readException(Parcel.java:1884)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at android.net.wifi.IWifiManager$Stub$Proxy.startLocalOnlyHotspot(IWifiManager.java:1968)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at android.net.wifi.WifiManager.startLocalOnlyHotspot(WifiManager.java:2228)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at com.appsinnova.android.keepshare.invitation.WifiShareActivity.initWifiAp(WifiShareActivity.kt:308)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at com.appsinnova.android.keepshare.invitation.WifiShareActivity.checkWriteSettings(WifiShareActivity.kt:182)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at com.appsinnova.android.keepshare.invitation.WifiShareActivity.initData(WifiShareActivity.kt:98)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at com.skyunion.android.base.RxBaseActivity.init(RxBaseActivity.java:188)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at com.skyunion.android.base.RxBaseActivity.onCreate(RxBaseActivity.java:137)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at com.appsinnova.android.keepshare.base.BaseActivity.onCreate(BaseActivity.kt:25)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at android.app.Activity.performCreate(Activity.java:7378)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at android.app.Activity.performCreate(Activity.java:7369)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3167)
04-24 13:31:17.521  5570  5570 E AndroidRuntime:        ... 11 more
04-24 13:31:17.524   603   634 I [email protected]: notifyAppState_2_1 pack:com.appsinnova.android.keepshare, act:com.appsinnova.android.keepshare, pid:5570, uid:10296, state:3
04-24 13:31:17.555  5570  5570 I Process : Sending signal. PID: 5570 SIG: 9

 

 

 

 

 

 

2 解决办法

在这个activity的destroy方法里面添加关闭就可以

reserva!!.close();
    override fun onDestroy() {
        super.onDestroy()
        if (handler != null && counter != null) {
            handler!!.removeCallbacks(counter)
        }
        //关闭socket
        if (serverSocket != null) {
            Log.i(TAG, "serverSocket != null and close")
            serverSocket!!.close()
        }
        run = false
        //关闭8.0以上的热点
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
            if (reserva != null){
                reserva!!.close();
            }
        } else {
            //关闭7.1热点的关闭
            WifiApUtil.closeWifiAp(this);
        }
        //打开wifi
        var result = wifiApAdmin!!.openWifi()
        Log.i(TAG, "result is :" + result);
    }
发布了1100 篇原创文章 · 获赞 724 · 访问量 322万+

猜你喜欢

转载自blog.csdn.net/u011068702/article/details/105739763
今日推荐