Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.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/5/ruby/25.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 Api 25上osmdroid的地图视图权限_Android_Permissions_Openstreetmap_Osmdroid - Fatal编程技术网

Android Api 25上osmdroid的地图视图权限

Android Api 25上osmdroid的地图视图权限,android,permissions,openstreetmap,osmdroid,Android,Permissions,Openstreetmap,Osmdroid,根据osmdroidwiki,我在运行时添加了“危险”权限: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (hasPermissions()) { initMap(); } else { ActivityCompat.requestPermissions(this, ne

根据osmdroidwiki,我在运行时添加了“危险”权限:

 @Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        if (hasPermissions()) {
        initMap();
    } else {
        ActivityCompat.requestPermissions(this, new String[]{
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
                Manifest.permission.ACCESS_FINE_LOCATION,
                Manifest.permission.ACCESS_COARSE_LOCATION}, 1);
    }
}
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == 1) {
        if (hasPermissions()) {
            initMap();
        } else {
            finish();
        }
    }
}
但第一次运行我的应用程序并授予权限位置和其他所需权限时,我的地图不会显示,但第二次运行我的应用程序时,地图会显示吗?我知道这个问题需要许可,但我的许可问题在哪里

    private boolean hasPermissions() {
    return ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) ==
            PackageManager.PERMISSION_GRANTED &&
            ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) ==
                    PackageManager.PERMISSION_GRANTED &&
            ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) ==
                    PackageManager.PERMISSION_GRANTED;
}
这是我的许可证:

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

在调用onRequestPermissionsResult()中的initMap()之前,请尝试延迟几秒钟


更新的权限有时需要时间才能反映到代码中。

在调用onRequestPermissionsResult()中的initMap()之前,请尝试延迟几秒钟

更新的权限有时需要时间才能反映到代码中。

我说:

setContentView(R.layout.activity_main);
在initMap()中,问题消失了。

我把:

setContentView(R.layout.activity_main);

在initMap()中,问题消失了。

我也遇到了同样的问题,我从osmdroid官方wiki中找到了以下代码片段,这对我很有用。 (我使用的是6.0.1版)

当Activity或Fragment onCreate()时,请尝试放置以下代码:


在运行时授予“危险”权限后,重新创建活动或片段。然后mapView将正常工作,无需重新打开应用程序。

我也遇到了同样的问题,我从osmdroid官方wiki中找到了以下代码片段,这对我很有用。 (我使用的是6.0.1版)

当Activity或Fragment onCreate()时,请尝试放置以下代码:

在运行时授予“危险”权限后,重新创建活动或片段。然后mapView将正常工作,无需重新打开应用程序

@Override public void onCreate(Bundle savedInstanceState) {
    Context ctx = getApplicationContext();
    Configuration.getInstance().load(ctx, PreferenceManager.getDefaultSharedPreferences(ctx));
    ...
    setContentView(R.layout.activity_main);
}