android - 得到许可的错误,即使我认为我给了它
问题描述
即使我将请求权限放在 onCreate 中,我也会收到位置权限错误。在我提出请求许可申请后,在崩溃后请求许可。
我将请求权限放在 onCreate 中。在我提出请求许可申请后,在崩溃后请求许可。
private boolean gpsInit() {
mLocService = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
if (mLocService != null) {
mLocProvider =
mLocService.getProvider(LocationManager.GPS_PROVIDER);
if (mLocProvider != null) {
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED) {
return true;
}
mLocService.addGpsStatusListener(this);
if
(mLocService.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
gpsStatusTextView.setText(getString(R.string.status_gps_ready));
return true;
}
}
}
gpsStatusTextView.setText
(getString(R.string.status_gps_no_support));
showDialog(NO_GPS_SUPPORT);
Log.e(TAG, "Unable to get GPS PROVIDER");
// todo disable gps controls into Preferences
return false;
}
日志:
java.lang.RuntimeException: Unable to resume activity
{com.quad14.obdnewtry/com.quad14.obdnewtry.activity.MainActivity}: java.lang.SecurityException: "gps" location provider requires ACCESS_FINE_LOCATION permission.
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3429)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3469)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2732)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.SecurityException: "gps" location provider requires ACCESS_FINE_LOCATION permission.
at android.os.Parcel.readException(Parcel.java:1684)
at android.os.Parcel.readException(Parcel.java:1637)
at android.location.ILocationManager$Stub$Proxy.getProviderProperties(ILocationManager.java:1056)
at android.location.LocationManager.getProvider(LocationManager.java:383)
at com.quad14.obdnewtry.activity.MainActivity.gpsInit(MainActivity.java:679)
at com.quad14.obdnewtry.activity.MainActivity.onResume(MainActivity.java:832)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1269)
at android.app.Activity.performResume(Activity.java:6783)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3406
Oncreate 内部:
if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_PERMISSION_LOCATION);
}
} else {
// We have already permission to use the location
}
在这一行出现错误
mLocProvider = mLocService.getProvider(LocationManager.GPS_PROVIDER);
我想要的只是申请应该在午餐时获得许可
解决方案
确保在清单中添加权限
如果没有,请在清单文件中写入以下内容。
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
推荐阅读
- python - 从列表中查找重复的 csv 列 [python pandas]
- node.js - TypeError:app.on 不是 Object 的函数。
- git - 合并 2 个分支后,git log 如何组织我的提交历史记录?
- reactjs - 如何将数据发送到最终表格
- linux - strace 没有显示完整的写入
- api - 如何做正确的休息api更新?
- html - 在 CSS 中结合悬停和之后的部署动画
- c++ - 为什么我的排名二叉搜索树实现如此缓慢?
- java - 减少错误最有用的 Intellij IDEA 插件是什么?
- android - Inoic 构建 android 失败:任务:capacitor-cordova-android-plugins:compileDebugJavaWithJavac FAILED