Я новичок в 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'
}