【发布时间】:2019-05-01 12:26:58
【问题描述】:
Android 8 及以上版本不会弹出 Google 地图权限。对于 Android 5,它运行良好。
权限应该像下图那样弹出,但在Android 8+版本上不显示
现在,我知道它与运行时权限有关。我添加了相关代码,但在我授予权限后应用程序停止了。
我做错了什么?
这些都是授予的权限。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
这是 onCreate() 中的代码
if (!checkPermission()) {
requestPermission();
}
这些是与权限检查和授予相关的代码
private boolean checkPermission() {
int result = ContextCompat.checkSelfPermission(getApplicationContext(), ACCESS_FINE_LOCATION);
int result1 = ContextCompat.checkSelfPermission(getApplicationContext(), ACCESS_COARSE_LOCATION);
return result == PackageManager.PERMISSION_GRANTED && result1 == PackageManager.PERMISSION_GRANTED;
}
private void requestPermission() {
ActivityCompat.requestPermissions(this, new String[]{ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_CODE);
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case PERMISSION_REQUEST_CODE:
if (grantResults.length > 0) {
boolean fineLocationAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
boolean coarseLocationAccepted = grantResults[1] == PackageManager.PERMISSION_GRANTED;
if (!(fineLocationAccepted && coarseLocationAccepted)) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (shouldShowRequestPermissionRationale(ACCESS_FINE_LOCATION)) {
showMessageOKCancel("You need to allow access to both the permissions",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION},
PERMISSION_REQUEST_CODE);
}
}
});
return;
}
}
}
}
break;
}
}
private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
new AlertDialog.Builder(MainActivity.this)
.setMessage(message)
.setPositiveButton("OK", okListener)
.setNegativeButton("Cancel", null)
.create()
.show();
}
但是在我点击“允许”后应用程序崩溃了。
错误信息
2019-05-01 23:46:17.257 4519-16175/? E/PhenotypeFlagCommitter: Retrieving snapshot for com.google.android.gms.playlog.uploader failed
java.lang.InterruptedException
at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos(AbstractQueuedSynchronizer.java:1063)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(AbstractQueuedSynchronizer.java:1352)
at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:278)
at asip.a(:com.google.android.gms@16091022@16.0.91 (040700-244116403):27)
at alhm.a(:com.google.android.gms@16091022@16.0.91 (040700-244116403):2)
at alhm.a(:com.google.android.gms@16091022@16.0.91 (040700-244116403):19)
at alhm.a(:com.google.android.gms@16091022@16.0.91 (040700-244116403):29)
at com.google.android.gms.clearcut.uploader.QosUploaderChimeraService.d(:com.google.android.gms@16091022@16.0.91 (040700-244116403):3)
at com.google.android.gms.clearcut.uploader.QosUploaderChimeraService.a(:com.google.android.gms@16091022@16.0.91 (040700-244116403):14)
at com.google.android.gms.clearcut.uploader.QosUploaderChimeraService.a(:com.google.android.gms@16091022@16.0.91 (040700-244116403):6)
at zse.run(:com.google.android.gms@16091022@16.0.91 (040700-244116403):5)
at rrt.b(:com.google.android.gms@16091022@16.0.91 (040700-244116403):32)
at rrt.run(:com.google.android.gms@16091022@16.0.91 (040700-244116403):21)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at rxx.run(Unknown Source:7)
at java.lang.Thread.run(Thread.java:764)
【问题讨论】:
-
你是否在代码中添加了检查权限
-
没有。我没有。所以,我应该添加 checkpermission 让它在 Android 8+ 版本上工作?
-
是的,你必须添加这些东西
-
你可以在这里添加你的代码吗?
-
为什么它可以在 Android 5 上运行?我读了一个叫做运行时权限的东西,这是 android 8+ 的要求吗?
标签: android google-maps permissions