Last active
March 21, 2023 12:15
-
-
Save arthtilva/40bac0d75dece5c716755221a98b2250 to your computer and use it in GitHub Desktop.
DownloadManager - download files using DownloadManager
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class NewsDetailActivity extends AppCompatActivity implements View.OnClickListener { | |
Activity activity; | |
Toolbar toolbar; | |
File TEMP_FILE_SAVE_PATH = Environment.getExternalStorageDirectory(); | |
String TEMP_FILE_NAME = "news_"; | |
String URL=""; | |
private DownloadManager downloadManager; | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_news_detail); | |
findViews(); | |
if (newsmedia != null) { | |
downloadref = new long[newsmedia.length]; | |
String fileName =URL.substring(URL.lastIndexOf('/') + 1); | |
final File file = new File(Environment.getExternalStorageDirectory(), "/" + getResources().getString(R.string.app_name) + "/" + fileName); | |
button.setOnClickListener(new View.OnClickListener() { | |
@Override | |
public void onClick(View v) { | |
int status = checkStatus(downloadref[id]); | |
if (file.exists() && status != DownloadManager.STATUS_RUNNING && status != DownloadManager.STATUS_PENDING) { | |
Uri uri = Uri.fromFile(file); | |
Intent intent = new Intent(android.content.Intent.ACTION_VIEW); | |
String mime = "*/*"; | |
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton(); | |
if (mimeTypeMap.hasExtension( | |
mimeTypeMap.getFileExtensionFromUrl(uri.toString()))) | |
mime = mimeTypeMap.getMimeTypeFromExtension( | |
mimeTypeMap.getFileExtensionFromUrl(uri.toString())); | |
intent.setDataAndType(uri, mime); | |
startActivity(intent); | |
} else { | |
if (status == DownloadManager.STATUS_RUNNING || status == DownloadManager.STATUS_PENDING) { | |
downloadManager.remove(downloadref[id]); | |
Toast.makeText(activity, "Download cancelled...", Toast.LENGTH_LONG).show(); | |
} else { | |
downloadref[id] = downloadMedia(newsmedia[id].getUrl()); | |
} | |
} | |
} | |
}); | |
} | |
} | |
IntentFilter filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE); | |
registerReceiver(downloadReceiver, filter); | |
} | |
} | |
@Override | |
protected void onDestroy() { | |
super.onDestroy(); | |
try { | |
unregisterReceiver(downloadReceiver); | |
} catch (IllegalArgumentException e) { | |
e.printStackTrace(); | |
} | |
} | |
public long downloadMedia(String URL) { | |
long downloadReference; | |
Uri Download_Uri = Uri.parse(URL); | |
DownloadManager.Request request = new DownloadManager.Request(Download_Uri); | |
//Restrict the types of networks over which this download may proceed. | |
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE); | |
//Set whether this download may proceed over a roaming connection. | |
request.setAllowedOverRoaming(false); | |
//Set the title of this download, to be displayed in notifications (if enabled). | |
request.setTitle(getResources().getString(R.string.app_name)); | |
//Set a description of this download, to be displayed in notifications (if enabled) | |
request.setDescription("Downloding..."); | |
//TO USE THIS ADD PERMISSION IN MANIFEST | |
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" /> | |
request.setNotificationVisibility(Request.VISIBILITY_HIDDEN); | |
//Set the local destination for the downloaded file to a path within the application's external files directory | |
//request.setDestinationInExternalPublicDir(getResources().getString(R.string.app_name), "hc.mp3"); | |
String fileName = URL.substring(URL.lastIndexOf('/') + 1); | |
request.setDestinationInExternalPublicDir(getResources().getString(R.string.app_name), fileName); | |
//Enqueue a new download and same the referenceId | |
downloadReference = downloadManager.enqueue(request); | |
Log.i("downloadReference", "" + downloadReference); | |
return downloadReference; | |
} | |
@Override | |
public void onClick(View v) { | |
} | |
private int checkStatus(long downloadReference) { | |
DownloadManager.Query myDownloadQuery = new DownloadManager.Query(); | |
//set the query filter to our previously Enqueued download | |
myDownloadQuery.setFilterById(downloadReference); | |
//Query the download manager about downloads that have been requested. | |
Cursor cursor = downloadManager.query(myDownloadQuery); | |
if (cursor.moveToFirst()) { | |
//checkStatus(cursor); | |
//column for status | |
int columnIndex = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS); | |
int status = cursor.getInt(columnIndex); | |
//column for reason code if the download failed or paused | |
int columnReason = cursor.getColumnIndex(DownloadManager.COLUMN_REASON); | |
int reason = cursor.getInt(columnReason); | |
//get the download filename | |
int filenameIndex = cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME); | |
String filename = cursor.getString(filenameIndex); | |
String statusText = ""; | |
String reasonText = ""; | |
switch (status) { | |
case DownloadManager.STATUS_FAILED: | |
statusText = "STATUS_FAILED"; | |
switch (reason) { | |
case DownloadManager.ERROR_CANNOT_RESUME: | |
reasonText = "ERROR_CANNOT_RESUME"; | |
break; | |
case DownloadManager.ERROR_DEVICE_NOT_FOUND: | |
reasonText = "ERROR_DEVICE_NOT_FOUND"; | |
break; | |
case DownloadManager.ERROR_FILE_ALREADY_EXISTS: | |
reasonText = "ERROR_FILE_ALREADY_EXISTS"; | |
break; | |
case DownloadManager.ERROR_FILE_ERROR: | |
reasonText = "ERROR_FILE_ERROR"; | |
break; | |
case DownloadManager.ERROR_HTTP_DATA_ERROR: | |
reasonText = "ERROR_HTTP_DATA_ERROR"; | |
break; | |
case DownloadManager.ERROR_INSUFFICIENT_SPACE: | |
reasonText = "ERROR_INSUFFICIENT_SPACE"; | |
break; | |
case DownloadManager.ERROR_TOO_MANY_REDIRECTS: | |
reasonText = "ERROR_TOO_MANY_REDIRECTS"; | |
break; | |
case DownloadManager.ERROR_UNHANDLED_HTTP_CODE: | |
reasonText = "ERROR_UNHANDLED_HTTP_CODE"; | |
break; | |
case DownloadManager.ERROR_UNKNOWN: | |
reasonText = "ERROR_UNKNOWN"; | |
break; | |
} | |
break; | |
case DownloadManager.STATUS_PAUSED: | |
statusText = "STATUS_PAUSED"; | |
switch (reason) { | |
case DownloadManager.PAUSED_QUEUED_FOR_WIFI: | |
reasonText = "PAUSED_QUEUED_FOR_WIFI"; | |
break; | |
case DownloadManager.PAUSED_UNKNOWN: | |
reasonText = "PAUSED_UNKNOWN"; | |
break; | |
case DownloadManager.PAUSED_WAITING_FOR_NETWORK: | |
reasonText = "PAUSED_WAITING_FOR_NETWORK"; | |
break; | |
case DownloadManager.PAUSED_WAITING_TO_RETRY: | |
reasonText = "PAUSED_WAITING_TO_RETRY"; | |
break; | |
} | |
break; | |
case DownloadManager.STATUS_PENDING: | |
statusText = "STATUS_PENDING"; | |
break; | |
case DownloadManager.STATUS_RUNNING: | |
statusText = "STATUS_RUNNING"; | |
break; | |
case DownloadManager.STATUS_SUCCESSFUL: | |
statusText = "STATUS_SUCCESSFUL"; | |
reasonText = "Filename:\n" + filename; | |
break; | |
} | |
Toast toast = Toast.makeText(NewsDetailActivity.this, | |
statusText + "\n" + | |
reasonText, | |
Toast.LENGTH_LONG); | |
toast.setGravity(Gravity.TOP, 25, 400); | |
toast.show(); | |
return status; | |
} | |
return 0; | |
} | |
private BroadcastReceiver downloadReceiver = new BroadcastReceiver() { | |
@Override | |
public void onReceive(Context context, Intent intent) { | |
//check if the broadcast message is for our Enqueued download | |
long referenceId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1); | |
if (downloadReference == referenceId) { | |
Button cancelDownload = (Button) findViewById(R.id.cancelDownload); | |
cancelDownload.setEnabled(false); | |
Toast toast = Toast.makeText(NewsDetailActivity.this, | |
"Download completed.", Toast.LENGTH_LONG); | |
toast.setGravity(Gravity.TOP, 25, 400); | |
toast.show(); | |
} | |
} | |
}; | |
void findViews() { | |
activity = this; | |
downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); | |
} | |
} | |
What is newsmedia, downloadref, downloadref[id] etc please help
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
COLUMN_LOCAL_FILENAME is deprecated; use ContentResolver.openFileDescriptor() instead