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:
Vasu Nori
2010-11-16 17:58:22 -08:00
parent eb4e475d94
commit 6e2b2a660e
2 changed files with 51 additions and 6 deletions

View File

@@ -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"

View File

@@ -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.