return file uri from downloadmanager instead of content uri for public downloads
also add another public method to return mimetype for the given downloaded file change is related to bug:3198355 Change-Id: I90bae443eec36968e0d533d9b07a514df369ac29
This commit is contained in:
@@ -26482,6 +26482,19 @@
|
||||
<parameter name="request" type="android.app.DownloadManager.Request">
|
||||
</parameter>
|
||||
</method>
|
||||
<method name="getMimeTypeForDownloadedFile"
|
||||
return="java.lang.String"
|
||||
abstract="false"
|
||||
native="false"
|
||||
synchronized="false"
|
||||
static="false"
|
||||
final="false"
|
||||
deprecated="not deprecated"
|
||||
visibility="public"
|
||||
>
|
||||
<parameter name="id" type="long">
|
||||
</parameter>
|
||||
</method>
|
||||
<method name="getUriForDownloadedFile"
|
||||
return="android.net.Uri"
|
||||
abstract="false"
|
||||
|
||||
@@ -886,8 +886,8 @@ public class DownloadManager {
|
||||
* downloaded successfully. otherwise, null is returned.
|
||||
*<p>
|
||||
* If the specified downloaded file is in external storage (for example, /sdcard dir),
|
||||
* then it is assumed to be safe for anyone to read and the returned {@link Uri} can be used
|
||||
* by any app to access the downloaded file.
|
||||
* then it is assumed to be safe for anyone to read and the returned {@link Uri} corresponds
|
||||
* to the filepath on sdcard.
|
||||
*
|
||||
* @param id the id of the downloaded file.
|
||||
* @return the {@link Uri} for the given downloaded file id, if download was successful. null
|
||||
@@ -903,8 +903,7 @@ public class DownloadManager {
|
||||
return null;
|
||||
}
|
||||
while (cursor.moveToFirst()) {
|
||||
int status = cursor.getInt(cursor.getColumnIndexOrThrow(
|
||||
DownloadManager.COLUMN_STATUS));
|
||||
int status = cursor.getInt(cursor.getColumnIndexOrThrow(COLUMN_STATUS));
|
||||
if (DownloadManager.STATUS_SUCCESSFUL == status) {
|
||||
int indx = cursor.getColumnIndexOrThrow(
|
||||
Downloads.Impl.COLUMN_DESTINATION);
|
||||
@@ -919,8 +918,9 @@ public class DownloadManager {
|
||||
return ContentUris.withAppendedId(Downloads.Impl.CONTENT_URI, id);
|
||||
} else {
|
||||
// return public uri
|
||||
return ContentUris.withAppendedId(
|
||||
Downloads.Impl.PUBLICLY_ACCESSIBLE_DOWNLOADS_URI, id);
|
||||
String path = cursor.getString(
|
||||
cursor.getColumnIndexOrThrow(COLUMN_LOCAL_FILENAME));
|
||||
return Uri.fromFile(new File(path));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -933,6 +933,38 @@ public class DownloadManager {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns {@link Uri} for the given downloaded file id, if the file is
|
||||
* downloaded successfully. otherwise, null is returned.
|
||||
*<p>
|
||||
* If the specified downloaded file is in external storage (for example, /sdcard dir),
|
||||
* then it is assumed to be safe for anyone to read and the returned {@link Uri} corresponds
|
||||
* to the filepath on sdcard.
|
||||
*
|
||||
* @param id the id of the downloaded file.
|
||||
* @return the {@link Uri} for the given downloaded file id, if download was successful. null
|
||||
* otherwise.
|
||||
*/
|
||||
public String getMimeTypeForDownloadedFile(long id) {
|
||||
Query query = new Query().setFilterById(id);
|
||||
Cursor cursor = null;
|
||||
try {
|
||||
cursor = query(query);
|
||||
if (cursor == null) {
|
||||
return null;
|
||||
}
|
||||
while (cursor.moveToFirst()) {
|
||||
return cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_MEDIA_TYPE));
|
||||
}
|
||||
} finally {
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
// downloaded file not found or its status is not 'successfully completed'
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restart the given downloads, which must have already completed (successfully or not). This
|
||||
* method will only work when called from within the download manager's process.
|
||||
|
||||
Reference in New Issue
Block a user