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 未消失;其原因在于小菜省略了设置 setContentIntent 的 PendingIntent;即便是不需要跳转安装或其他具体页面,也需要设置一个默认的 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,实际与设置点击通知操作类似,也需要设置对应的 PendingIntent 到 setDeleteIntent 即可;

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);

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

来源: 阿策小和尚
目录
相关文章
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
762 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
2083 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1325 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1379 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
639 0
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
7292 77
|
移动开发 安全 Java
Android历史版本与APK文件结构
通过以上内容,您可以全面了解Android的历史版本及其主要特性,同时掌握APK文件的结构和各部分的作用。这些知识对于理解Android应用的开发和发布过程非常重要,也有助于在实际开发中进行高效的应用管理和优化。希望这些内容对您的学习和工作有所帮助。
1979 83
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
563 2
Android自定义View之不得不知道的文件attrs.xml(自定义属性)

热门文章

最新文章