public class DownloadService extends Service {
// 超时
private static final int TIMEOUT = 15 * 1000;
//handler状态
public static final int DOWN_SUCCESS = 1;
public static final int DOWN_LOADING = 2;
public static final int DOWN_ERROR = 3;
public static final int DOWN_START = 4;
//通知
private NotificationManager notificationManager;
private Notification notification; //下载通知进度提示
private NotificationCompat.Builder builder;
//app名称
private String app_name;
//appUrl
public static final String KEY_DOWN_URL = "Key_Down_Url";
//app名称
public static final String KEY_APP_NAME = "Key_App_Name";
//appUrl
private static String down_url;
private final int NotificationID = 1;
private int totalSize;// 文件总大小
private int downloadCount = 0;// 已经下载好的大小
private File updateFile;
protected static final String CHANNEL_ID = "ander_dorwloadapk_notification";
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent != null) {
app_name = intent.getStringExtra(KEY_APP_NAME);
down_url = intent.getStringExtra(KEY_DOWN_URL);
}
// create file,应该在这个地方加一个返回值的判断SD卡是否准备好,文件是否创建成功,等等!
updateFile = FileUtils.getApkDownloadPath(this, app_name);
notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
createNotificationChannel(notificationManager);
}
builder = getNotificationBuilder();
new Thread(new UpLoadDataThread()).start();
if (!TextUtils.isEmpty(updateFile.toString())) {
createThread();
} else {
Toast.makeText(this, R.string.download_failed, Toast.LENGTH_SHORT).show();
stopSelf();
}
try {
startForeground(1, null);
} catch (Exception e) {
e.printStackTrace();
}
return super.onStartCommand(intent, flags, startId);
}
@Tar
Android 下载apk并且通知栏更新进度(通知栏兼容 Android 8.0)
最新推荐文章于 2022-12-16 16:45:46 发布
本文介绍了如何在Android应用中实现apk的下载过程,并且详细讲解了如何在通知栏展示下载进度,以兼容Android 8.0及更高版本的操作。通过使用Service和Notification API,确保用户可以实时了解下载状态。
摘要由CSDN通过智能技术生成