Download Manger not working in Android Pie 9.0 (Xiaomi mi A2)

最后都变了- 提交于 2019-11-27 02:03:15

This worked for me After Xiaomi mi A2 received software update notification today.

what worked for me

Add android:networkSecurityConfig="@xml/network_security_config" in application tag

<application
        android:name=".ApplicationClass"
        android:allowBackup="true"
        android:hardwareAccelerated="false"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true"
        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 like in the picture below

This explains the issue in software

Use this Service class

public class DownloadService extends IntentService {
public DownloadService() {
    super("Download Service");
}

String CHANNEL_ID1 = "Download Notification";
String CHANNEL_NAME1 = "Download Notification";
private NotificationManager notificationManager;
private int totalFileSize;
String name;
String url;
NotificationCompat.Builder builder;
@Override
protected void onHandleIntent(Intent intent) {
    name = intent.getStringExtra("name");
    url = intent.getStringExtra("url");

    createChannels();
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
    Uri sounduri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    builder = new NotificationCompat.Builder(this, CHANNEL_ID1);
    builder.setContentTitle("Download");
    builder.setContentText("Downloading File");
    builder.setContentIntent(pendingIntent);
    builder.setSmallIcon(R.mipmap.ic_launcher);
    Bitmap bm = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
    builder.setLargeIcon(bm);
    builder.setSound(null);
    builder.setAutoCancel(true);
    notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    notificationManager.notify(0, builder.build());


    initDownload();

}

private void initDownload() {

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("Your Url") //Url Base here
            .build();

    RetrofitInterface retrofitInterface = retrofit.create(RetrofitInterface.class);

    Call<ResponseBody> request = retrofitInterface.downloadFile(url);// pass your Url
    try {

        downloadFile(request.execute().body());

    } catch (IOException e) {

        e.printStackTrace();
        Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();

    }
}
private void downloadFile(ResponseBody body) throws IOException {

    String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Folder name";
    File folder = new File(path);
    if (!folder.exists()) {
        folder.mkdir();
    }
    int count;
    byte data[] = new byte[1024 * 4];
    long fileSize = body.contentLength();
    InputStream bis = new BufferedInputStream(body.byteStream(), 1024 * 8);
    File outputFile = new File(path, name + ".mp3");// file name & extension
    OutputStream output = new FileOutputStream(outputFile);
    long total = 0;
    long startTime = System.currentTimeMillis();
    int timeCount = 1;
    while ((count = bis.read(data)) != -1) {

        total += count;
        totalFileSize = (int) (fileSize / (Math.pow(1024, 2)));
        double current = Math.round(total / (Math.pow(1024, 2)));

        int progress = (int) ((total * 100) / fileSize);

        long currentTime = System.currentTimeMillis() - startTime;

        Download download = new Download();
        download.setTotalFileSize(totalFileSize);

        if (currentTime > 1000 * timeCount) {

            download.setCurrentFileSize((int) current);
            download.setProgress(progress);
            sendNotification(download);
            timeCount++;
        }

        output.write(data, 0, count);
    }
    onDownloadComplete();
    output.flush();
    output.close();
    bis.close();

}

private void sendNotification(Download download) {
    builder.setProgress(100, download.getProgress(), false);
    builder.setContentText("Downloading file " + download.getCurrentFileSize() + "/" + totalFileSize + " MB");
    notificationManager.notify(0, builder.build());
}


private void onDownloadComplete() {

    Download download = new Download();
    download.setProgress(100);
    notificationManager.cancel(0);
    builder.setProgress(0, 0, false);
    builder.setContentText("File Downloaded");
    //builder.setVibrate(null);
    notificationManager.notify(0, builder.build());
}

@Override
public void onTaskRemoved(Intent rootIntent) {
    notificationManager.cancel(0);
}

public void createChannels() {

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        NotificationChannel notifiCationChannel = new NotificationChannel(CHANNEL_ID1, CHANNEL_NAME1, NotificationManager.IMPORTANCE_DEFAULT);
        notifiCationChannel.enableLights(true);
        notifiCationChannel.enableVibration(false);
        notifiCationChannel.setLightColor(Color.GREEN);
        notifiCationChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
        notifiCationChannel.setShowBadge(true);
        notifiCationChannel.setSound(null,null);
        notificationManager.createNotificationChannel(notifiCationChannel);

    }
}
}

Call this method from Your activity/fragment and pass url and name

private fun startDownload() {
    val intent = Intent(this, DownloadService::class.java)
    intent.putExtra("name", name)
    intent.putExtra("url", url)
    startService(intent)

}

Retrofit Interface 

interface RetrofitInterface {

@GET
@Streaming
fun downloadFile(@Url url: String): Call<ResponseBody>
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!