小编M.S*_*.S.的帖子

从Android应用程序访问外部存储中的某个下载的.sqlite数据库

我试图在基于Android WebView的应用程序中实现离线地图功能:

使用DownloadManager,我从我们的网络服务器下载一个sqlite数据库文件(像.mbtiles这样的结构),它包含地图图块图像的blob("离线地图")并通过它存储在android外部存储中

public void downloadMap() {
    downloadManager = (DownloadManager) getActivity().getSystemService(Activity.DOWNLOAD_SERVICE);
    DownloadManager.Request r = new DownloadManager.Request(Uri.parse("http://sry.youtoknow.idontwant/map.sqlite"));

    r.setDestinationInExternalFilesDir(getContext(), "map", "map.sqlite");

    downloadManager.enqueue(r);
}
Run Code Online (Sandbox Code Playgroud)

下载似乎工作得很好. 我注册了一个BroadcastReceiver接收DownloadManager.ACTION_DOWNLOAD_COMPLETE并存储"map.sqlite"的路径使用SharedPreferences.

要从JavaScript访问数据库以使用中的tile图像WebView,通过检查customhttp:URL中的自定义虚构模式名称来拦截XHRequests:

webView.setWebViewClient(new WebViewClient() {
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
        String url = request.getUrl().toString();
        if (!url.startsWith("customhttp:")) {
            return null;
        } else {
            SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext());
            SQLiteDatabase db = SQLiteDatabase.openDatabase(preferences.getString("map_uri", Environment.getExternalStorageDirectory().getPath() + "berlin.sqlite"), null, SQLiteDatabase.OPEN_READONLY); …
Run Code Online (Sandbox Code Playgroud)

sqlite android android-sqlite

17
推荐指数
1
解决办法
547
查看次数

标签 统计

android ×1

android-sqlite ×1

sqlite ×1