Android之android8.1打开热点提示UID 10140 does not have Location permission和Location mode is enabled.

1 问题

在三星安卓8.1版本手机上,打开热点

WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
            wifiManager.startLocalOnlyHotspot(new WifiManager.LocalOnlyHotspotCallback() {

                @TargetApi(Build.VERSION_CODES.O)
                @Override
                public void onStarted(WifiManager.LocalOnlyHotspotReservation reservation) {
                    super.onStarted(reservation);
                    mReservation = reservation;
                    WifiConfiguration wifiConfiguration = reservation.getWifiConfiguration();
                    ssid = wifiConfiguration.SSID;
                    mHandler.obtainMessage(2018, wifiConfiguration).sendToTarget();
                }

                @Override
                public void onStopped() {
                    super.onStopped();
                }

                @Override
                public void onFailed(int reason) {
                    super.onFailed(reason);
                }

            }, mHandler);

我先判断是否有Manifest.permission.WRITE_SETTINGS权限,没有的话进行申请

                val intent = Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS, Uri.parse("package:$packageName"))
                startActivityForResult(intent, REQUEST_CODE)

然后有了写系统权限之后,打开热点报错如下

04-23 22:27:34.804  8267  8267 E AndroidRuntime: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2000, result=0, data=null} to activity {com.appsinnova.android.keepshare/com.appsinnova.android.keepshare.invitation.WifiShareActivity}: java.lang.SecurityException: UID 10140 does not have Location permission
04-23 22:27:34.804  8267  8267 E AndroidRuntime:        at android.app.ActivityThread.deliverResults(ActivityThread.java:4467)
04-23 22:27:34.804  8267  8267 E AndroidRuntime:        at android.app.ActivityThread.handleSendResult(ActivityThread.java:4511)
04-23 22:27:34.804  8267  8267 E AndroidRuntime:        at android.app.ActivityThread.-wrap19(Unknown Source:0)
04-23 22:27:34.804  8267  8267 E AndroidRuntime:        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1707)
04-23 22:27:34.804  8267  8267 E AndroidRuntime:        at android.os.Handler.dispatchMessage(Handler.java:106)
04-23 22:27:34.804  8267  8267 E AndroidRuntime:        at android.os.Looper.loop(Looper.java:164)
04-23 22:27:34.804  8267  8267 E AndroidRuntime:        at android.app.ActivityThread.main(ActivityThread.java:6746)
04-23 22:27:34.804  8267  8267 E AndroidRuntime:        at java.lang.reflect.Method.invoke(Native Method)
04-23 22:27:34.804  8267  8267 E AndroidRuntime:        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
04-23 22:27:34.804  8267  8267 E AndroidRuntime:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
04-23 22:27:34.804  8267  8267 E AndroidRuntime: Caused by: java.lang.SecurityException: UID 10140 does not have Location permission
04-23 22:27:34.804  8267  8267 E AndroidRuntime:        at android.os.Parcel.readException(Parcel.java:2013)
04-23 22:27:34.804  8267  8267 E AndroidRuntime:        at android.os.Parcel.readException(Parcel.java:1959)
04-23 22:27:34.804  8267  8267 E AndroidRuntime:        at android.net.wifi.IWifiManager$Stub$Proxy.startLocalOnlyHotspot(IWifiManager.java:1737)
04-23 22:27:34.804  8267  8267 E AndroidRuntime:        at android.net.wifi.WifiManager.startLocalOnlyHotspot(WifiManager.java:2083)
04-23 22:27:34.804  8267  8267 E AndroidRuntime:        at com.appsinnova.android.keepshare.invitation.WifiShareActivity.initWifiAp(WifiShareActivity.kt:286)
04-23 22:27:34.804  8267  8267 E AndroidRuntime:        at com.appsinnova.android.keepshare.invitation.WifiShareActivity.onActivityResult(WifiShareActivity.kt:72)
04-23 22:27:34.804  8267  8267 E AndroidRuntime:        at android.app.Activity.dispatchActivityResult(Activity.java:7291)
04-23 22:27:34.804  8267  8267 E AndroidRuntime:        at android.app.ActivityThread.deliverResults(ActivityThread.java:4463)
04-23 22:27:34.804  8267  8267 E AndroidRuntime:        ... 9 more
04-23 22:27:53.850  1804  2945 I ActivityManager: Killing 8267:com.appsinnova.android.keepshare/u0a140 (adj 0): crash

很明显这里没有does not have Location permission,没有定位权限,然后检查AndroidMinifest.xml文件,的确有如下权限

  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

那么我们接下来就要申请这个权限,我这里用的Rxpermissios申请的

        val rxPermissions = RxPermissions(this)
        rxPermissions.request(
            Manifest.permission.ACCESS_FINE_LOCATION
        ).subscribe { aBoolean ->
            Log.i(TAG, "ACCESS_FINE_LOCATION aBoolean isL" + aBoolean);
            if (aBoolean) { //申请的权限全部允许
                Log.i(TAG, "申请ACCESS_FINE_LOCATION权限  success");
            } else { //只要有一个权限被拒绝,就会执行
                Log.i(TAG, "ACCESS_FINE_LOCATION do not have");
                //text_no_permisson
                ToastUtils.showShort(getString(R.string.text_no_permisson))
                finish()
            }
        }

申请好了打开热点又报这个错误

04-23 22:40:30.860 11198 11198 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.appsinnova.android.keepshare/com.appsinnova.android.keepshare.invitation.WifiShareActivity}: java.lang.SecurityException: Location mode is not enabled.
04-23 22:40:30.860 11198 11198 E AndroidRuntime:        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2961)
04-23 22:40:30.860 11198 11198 E AndroidRuntime:        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3039)
04-23 22:40:30.860 11198 11198 E AndroidRuntime:        at android.app.ActivityThread.-wrap11(Unknown Source:0)
04-23 22:40:30.860 11198 11198 E AndroidRuntime:        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1652)
04-23 22:40:30.860 11198 11198 E AndroidRuntime:        at android.os.Handler.dispatchMessage(Handler.java:106)
04-23 22:40:30.860 11198 11198 E AndroidRuntime:        at android.os.Looper.loop(Looper.java:164)
04-23 22:40:30.860 11198 11198 E AndroidRuntime:        at android.app.ActivityThread.main(ActivityThread.java:6746)
04-23 22:40:30.860 11198 11198 E AndroidRuntime:        at java.lang.reflect.Method.invoke(Native Method)
04-23 22:40:30.860 11198 11198 E AndroidRuntime:        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
04-23 22:40:30.860 11198 11198 E AndroidRuntime:        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
04-23 22:40:30.860 11198 11198 E AndroidRuntime: Caused by: java.lang.SecurityException: Location mode is not enabled.
04-23 22:40:30.860 11198 11198 E AndroidRuntime:        at android.os.Parcel.readException(Parcel.java:2013)
04-23 22:40:30.860 11198 11198 E AndroidRuntime:        at android.os.Parcel.readException(Parcel.java:1959)
04-23 22:40:30.860 11198 11198 E AndroidRuntime:        at android.net.wifi.IWifiManager$Stub$Proxy.startLocalOnlyHotspot(IWifiManager.java:1737)
04-23 22:40:30.860 11198 11198 E AndroidRuntime:        at android.net.wifi.WifiManager.startLocalOnlyHotspot(WifiManager.java:2083)
04-23 22:40:30.860 11198 11198 E AndroidRuntime:        at com.appsinnova.android.keepshare.invitation.WifiShareActivity.initWifiAp(WifiShareActivity.kt:309)
04-23 22:40:30.860 11198 11198 E AndroidRuntime:        at com.appsinnova.android.keepshare.invitation.WifiShareActivity.checkWriteSettings(WifiShareActivity.kt:183)
04-23 22:40:30.860 11198 11198 E AndroidRuntime:        at com.appsinnova.android.keepshare.invitation.WifiShareActivity.initData(WifiShareActivity.kt:99)
04-23 22:40:30.860 11198 11198 E AndroidRuntime:        at com.skyunion.android.base.RxBaseActivity.init(RxBaseActivity.java:188)
04-23 22:40:30.860 11198 11198 E AndroidRuntime:        at com.skyunion.android.base.RxBaseActivity.onCreate(RxBaseActivity.java:137)
04-23 22:40:30.860 11198 11198 E AndroidRuntime:        at com.appsinnova.android.keepshare.base.BaseActivity.onCreate(BaseActivity.kt:25)
04-23 22:40:30.860 11198 11198 E AndroidRuntime:        at android.app.Activity.performCreate(Activity.java:7024)
04-23 22:40:30.860 11198 11198 E AndroidRuntime:        at android.app.Activity.performCreate(Activity.java:7015)
04-23 22:40:30.860 11198 11198 E AndroidRuntime:        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1215)
04-23 22:40:30.860 11198 11198 E AndroidRuntime:        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2914)
04-23 22:40:30.860 11198 11198 E AndroidRuntime:        ... 9 more

2 解决办法

最后错误很明显的

Location mode is not enabled.

需要打开定位开关,这是三星安卓8.1手机需要打开GPS开关,还不知道其它高版本手机需不需要,待测试。

发布了1099 篇原创文章 · 获赞 721 · 访问量 321万+

猜你喜欢

转载自blog.csdn.net/u011068702/article/details/105719974