Android 文件重定向下载 & 通知问题小结

简介: Android 重定向文件下载尝试与通知栏信息提醒!

    小菜之前在 Android 处理文件下载过程中遇到以下几个小问题,小菜简单整理一下;

Download

重定向文件下载如何获取文件类型?

    小菜在下载过程中通常需要获取文件名称和文件类型等进行具体的业务处理;而下载类的链接也不是固定格式的,主要区分为 https://github.com/ace.../test.apk 以及 https://github.com/ace...?app=acetest 等经过重定向之后的下载链接;

    针对第一种类型链接,小菜可以方便的获取文件类型和名称等一系列信息,针对第二种重定向类型链接,小菜尝试了如下几种方式;

方案一:

    小菜尝试通过 BufferedInputStream 获取文件类型,其中调用时需要进行异步操作,而结果并不如意,很多文件类型不能直接识别;

private String getFileType(String path) {
    String type = "";
    BufferedInputStream bufferedInputStream = null;
    HttpURLConnection urlconnection = null;
    try {
        URL url = new URL(path);
        urlconnection = (HttpURLConnection) url.openConnection();
        urlconnection.connect();
        bufferedInputStream = new BufferedInputStream(urlconnection.getInputStream());
        type = HttpURLConnection.guessContentTypeFromStream(bufferedInputStream) + "";
    } catch (IOException e) {
        e.printStackTrace();
    }
    return type;
}

方案二:

    小菜借助 OKHttp 方式将重定向的 URL 转为起始状态 URL,从而获取文件名称,文件类型等;但该方式调用时也需要异步操作,不能在主线程中执行;

private void getRealUrl(String url) {
    if (!Empty.check(url)) {
        try {
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder().url(url).build();
            Response response = client.newCall(request).execute();
            HttpUrl realUrl = response.request().url();
            if (!Empty.check(realUrl) && !Empty.check(realUrl.url())) {
                String temp = realUrl.toString();
                String fileName = temp.substring(temp.lastIndexOf("/") + 1);
                if (fileName.contains("?")) {
                    fileName = fileName.substring(0, fileName.lastIndexOf("?"));
                }
                ...
            }
        } catch (IOException e) {
            Logger.e(TAG, Empty.check(e) ? "" : e.getMessage());
        }
    }
}

方案三:

    在具体特定 WebView 场合,可以通过 WebView 预先加载之后获取起始下载链接,之后在进行具体的业务逻辑操作;

    小菜尝试了多种方式,对于重定向类型下载链接基本都需要异步耗时操作,暂时还未找到更简单快捷的方式;

Notification

    Notification 在日常应用场景非常多,而配合下载类提示用户时小菜遇到几个小问题,简单整理一下;

1. 使用进度条时提示音一直播放?

    小菜测试时,使用进度条 setProgress 时,随着进度的进行提示音一直在提醒,此时可以设置 NotificationCompat.Builder.setOnlyAlertOnce 只提醒一次即可;于此同事,部分手机时间一直在闪动,例如:刚刚 一直在提示,可以通过 setShowWhen 关闭时间戳提示即可;

NotificationCompat.Builder notification =
    new NotificationCompat.Builder(context, notifyId + "").setSmallIcon(R.drawable.icon)
        .setSound(null)
        .setVibrate(null)
        .setContentTitle(title)
        .setContentText(des)
        .setAutoCancel(true)
        .setShowWhen(false)
        .setOnlyAlertOnce(true)
        .setProgress(100, downloadProgress, false);

2. 结束后点击通知栏消息不消失?

    小菜测试在设置点击自动关闭属性 setAutoCancel 后,完成下载,点击通知栏消息时,该 Notification 未消失;其原因在于小菜省略了设置 setContentIntentPendingIntent;即便是不需要跳转安装或其他具体页面,也需要设置一个默认的 PendingIntent

PendingIntent pendingIntent;
if (fileType != null && fileType.equals(FileDownloadManager.FILE_TYPE_APK)) {
    pendingIntent = PendingIntent.getActivity(context, 0, clickIntent, 0);
} else {
    pendingIntent = PendingIntent.getBroadcast(context, REQUESTCODE, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT);
}

NotificationCompat.Builder notification =
    new NotificationCompat.Builder(context, notifyId + "").setSmallIcon(R.drawable.icon)
        .setContentText(des)
        .setContentIntent(pendingIntent);

3. 如何左右滑动清除通知监听?

    小菜之前未尝试过滑动清除 Notification,实际与设置点击通知操作类似,也需要设置对应的 PendingIntentsetDeleteIntent 即可;

pendingIntent = PendingIntent.getBroadcast(context, REQUESTCODE, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT);

NotificationCompat.Builder notification =
    new NotificationCompat.Builder(context, notifyId + "").setSmallIcon(R.drawable.icon)
        .setContentText(des)
        .setDeleteIntent(pendingIntent);

    小菜在测试过程中,学习了很多之前不常用的属性,内容都很简单,小菜不做具体的介绍;主要是对于重定向文件下载的一个小积累;如有错误,请多多指导!

来源: 阿策小和尚
目录
相关文章
|
1月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
236 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
1月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
203 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
1月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
515 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
1月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
120 0
|
9月前
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
338 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
4月前
|
存储 Android开发 数据安全/隐私保护
Thanox安卓系统增加工具下载,管理、阻止、限制后台每个APP运行情况
Thanox是一款Android系统管理工具,专注于权限、后台启动及运行管理。支持应用冻结、系统优化、UI自定义和模块管理,基于Xposed框架开发,安全可靠且开源免费,兼容Android 6.0及以上版本。
401 4
|
4月前
|
存储 人工智能 文字识别
三款安卓手机word编辑器下载,Microsoft Word,wps office,Word手机版,手机word编辑查看阅读器,PDF转换器apk下载
WPS Office是一款功能强大的办公软件,支持文档编辑、表格处理和演示文稿制作,兼容多种格式并提供丰富的云服务。它具备低内存占用、快速运行的特点,支持跨设备同步与多人协作,内置海量模板及AI辅助功能,如智能写作和PPT自动生成。此外,还可扫描文件、编辑PDF并转换为其他格式,极大提升办公效率,适合手机用户便捷操作。
413 1
|
6月前
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
170 2
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
|
6月前
|
Java Android开发
Android studio中build.gradle文件简单介绍
本文解析了Android项目中build.gradle文件的作用,包括jcenter仓库配置、模块类型定义、包名设置及依赖管理,涵盖本地、库和远程依赖的区别。
601 19
|
8月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
1990 77