protected void startThumbnailCreation() { if (thumbnail_size_perc <= 0) return; // Log.i( TAG, "thumbnails " + thumbnail_size_perc ); String path = getPath(uri, true); if (path == null || path.charAt(0) != '/') return; if (tht != null) tht.interrupt(); Handler h = new Handler() { public void handleMessage(Message msg) { notifyDataSetChanged(); } }; tht = new ThumbnailsThread(this, h, Utils.mbAddSl(path), items); tht.start(); }
public final String getPath(Uri u, boolean dir) { try { final List<String> paths = u.getPathSegments(); if (paths.size() < 4) return null; String path_part = paths.get(3); int col_pos = path_part.lastIndexOf(':'); String volume, path_root = null, sub_path, full_path; volume = paths.get(1); sub_path = path_part.substring(col_pos + 1); if (volume.startsWith("primary")) return Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + sub_path; else { try { File probe; volume = volume.substring(0, volume.length() - 1); if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { full_path = "/mnt/media_rw/" + volume + "/" + sub_path; probe = new File(full_path); if (dir ? probe.isDirectory() : probe.isFile()) return full_path; } else { path_root = Utils.getSecondaryStorage(); if (path_root != null) { full_path = Utils.mbAddSl(path_root) + sub_path; probe = new File(full_path); if (dir ? probe.isDirectory() : probe.isFile()) return full_path; } } } catch (Exception e) { } if (path_root == null) path_root = volume; // better than nothing } return path_root + "/" + sub_path; } catch (Exception e) { Log.e(TAG, "Can't get the real location of " + u, e); } return null; }