I've been using DownloadManager in a production app without problems but now it fails in Android Pie (API 28). Please note that the download is marked as failed and returns error 400.
@Override
public void onReceive(Context context, Intent intent) {
long reference = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterById(reference);
DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
Cursor cursor = downloadManager.query(query);
cursor.moveToFirst();
int statusIndex = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS);
int status = cursor.getInt(statusIndex);
if (status == DownloadManager.STATUS_SUCCESSFUL) {
int fileUriIndex = cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI);
String savedFileUri = cursor.getString(fileUriIndex);
ParcelFileDescriptor pfd = null;
try {
pfd = context.getContentResolver().openFileDescriptor(Uri.parse(savedFileUri), "r");
PamplonaParkingXMLParser pamplonaParkingXMLParser = new PamplonaParkingXMLParser();
ParkingList parkingList = pamplonaParkingXMLParser.parse(pfd);
ObservableObject.getInstance().updateValue(parkingList);
if (pfd != null) {
pfd.close();
}
} catch (XmlPullParserException e) {
Log.e(TAG, e.getDetail().getLocalizedMessage());
} catch (IOException | NullPointerException e) {
Log.e(TAG, e.getLocalizedMessage());
}
} else if(status == DownloadManager.STATUS_FAILED){
Log.e(TAG, "Download failed");
int reasonIndex = cursor.getColumnIndex(DownloadManager.COLUMN_REASON);
int reason = cursor.getInt(reasonIndex);
Log.e(TAG, reason +"");
}
}
Try these solutions
Solution 1)
Add this line in application tag in manifest
file
android:usesCleartextTraffic="true"
like below
<application
android:name=".ApplicationClass"
android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config"
android:supportsRtl="true"
android:theme="@style/AppTheme">
Add this tag in application tag in manifest
file
Solution 2)
Add android:networkSecurityConfig="@xml/network_security_config"
in application tag
<application
android:name=".ApplicationClass"
android:networkSecurityConfig="@xml/network_security_config"
android:supportsRtl="true"
android:theme="@style/AppTheme">
where network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
Create xml
under res directory and then network_security_config.xml
in xml
folder
For more info refer my answer
Download Manger not working in Android Pie 9.0 (Xiaomi mi A2)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With