Osmdroid не показывает карту - PullRequest
0 голосов
/ 26 мая 2020

Я новичок в osmdroid, поэтому я выполнил этот учебник, чтобы отобразить карту, но я всегда получаю эту ошибку в Logcat:

 E/SQLiteDatabase: Failed to open database '/storage/emulated/0/cache.db'.
    android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14 SQLITE_CANTOPEN): Could not open database

Я предоставил все предполагаемые необходимы разрешения, но я не знаю, как решить эту проблему.

Вот мой код:

1. XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <org.osmdroid.views.MapView android:id="@+id/map"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</LinearLayout>
Активность
public class MainActivity extends AppCompatActivity {

    private final String[] Permisos = {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION,
    Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};

    @Override public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        IConfigurationProvider provider = Configuration.getInstance();
        provider.setUserAgentValue(BuildConfig.APPLICATION_ID);

        provider.setOsmdroidBasePath(getStorage());
        provider.setOsmdroidTileCache(getStorage());

        setContentView(R.layout.activity_main);

        if(!hasPermissions(this, Permisos)){
            Toast.makeText(this, "pidiendolo desde main", Toast.LENGTH_SHORT).show();
            ActivityCompat.requestPermissions(this, Permisos, 1);
        }

        //Configuration.getInstance().setUserAgentValue("github-firefishy-map/0.1");

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);

        MapView map = (MapView) findViewById(R.id.map);
        map.setTileSource(TileSourceFactory.MAPNIK);
        map.setBuiltInZoomControls(true);
        map.setMultiTouchControls(true);

        GeoPoint startPoint = new GeoPoint(48.13, -1.63);
        IMapController mapController = map.getController();
        mapController.setZoom(9);
        mapController.setCenter(startPoint);
    }

    private static boolean hasPermissions(Context context, String... permisos){
        if(context!=null && permisos!=null){
            for(String permiso: permisos){
                if(ActivityCompat.checkSelfPermission(context, permiso) != PackageManager.PERMISSION_GRANTED){
                    return false;
                }
            }
        }
        return true;
    }
}

3. Разрешения манифеста:

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

4. Зависимости Gradle (с включением библиотеки osmbonuspack_6.6.0 в каталог libs):

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    implementation 'org.osmdroid:osmdroid-android:6.1.0'
    implementation 'org.osmdroid:osmdroid-wms:6.0.1'
    implementation 'org.osmdroid:osmdroid-mapsforge:6.0.1'
    implementation 'org.osmdroid:osmdroid-geopackage:6.0.1'
    implementation (name:'osmbonuspack_6.6.0', ext:'aar')
    implementation 'org.apache.commons:commons-lang3:3.4'
    implementation 'com.google.code.gson:gson:2.8.6'
    implementation 'com.squareup.okhttp3:okhttp:3.14.4'
}

1 Ответ

0 голосов
/ 26 мая 2020

Решено!

Я только что изменил

 IConfigurationProvider provider = Configuration.getInstance();
        provider.setUserAgentValue(BuildConfig.APPLICATION_ID);

        provider.setOsmdroidBasePath(getStorage());
        provider.setOsmdroidTileCache(getStorage());

в onCreate с помощью:

        Context ctx = getApplicationContext();
        Configuration.getInstance().load(ctx, PreferenceManager.getDefaultSharedPreferences(ctx));

, и это сработало.

...