使用Vitamio打造自己的Android万能播放器(8)——细节优化

简介:

前言

  成功的产品往往在细节之处也做到极致,产品和项目从使用的角度来看最大的区别我认为也就是细节的处理上。开播视频的目标是产品,前面7篇文章高歌猛进,添加了很多的功能,也该停下来休整一下,优化一下,也欢迎交流反馈做得不周到的地方。由于开源,大家也可以按照自己的喜好来添加修改不同的功能和细节。
 
声明
  欢迎转载,但请保留文章原始出处:) 
    博客园:http://www.cnblogs.com
    农民伯伯: http://over140.cnblogs.com 
 
系列
  4、 使用Vitamio打造自己的Android万能播放器(4)——本地播放(快捷搜索、数据存储)
  5、 使用Vitamio打造自己的Android万能播放器(5)——在线播放(播放优酷视频)
  7、使用Vitamio打造自己的Android万能播放器(7)——在线播放(下载视频)

 

正文
  一、更新日志
    1.  新增:显示SDCard剩余空间

 如果SD卡容量有限,而且经常使用下载视频,对剩余空间比较关注。如图:

代码网上找的,也有在项目里用过的:

复制代码
     public  static String showFileSize( long size) {
        String fileSize;
         if (size < KB)
            fileSize = size + "B";
         else  if (size < MB)
            fileSize = String.format("%.1f", size / KB) + "KB";
         else  if (size < GB)
            fileSize = String.format("%.1f", size / MB) + "MB";
         else
            fileSize = String.format("%.1f", size / GB) + "GB";

         return fileSize;
    }

     /**  显示SD卡剩余空间  */
     public  static String showFileAvailable() {
        String result = "";
         if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
            StatFs sf =  new StatFs(Environment.getExternalStorageDirectory().getPath());
             long blockSize = sf.getBlockSize();
             long blockCount = sf.getBlockCount();
             long availCount = sf.getAvailableBlocks();
             return showFileSize(availCount * blockSize) + " / " + showFileSize(blockSize * blockCount);
        }
         return result;
复制代码

    } 

 

    2.  改进:加载网页时显示正在加载效果

未改之前每次进入网页都会空白一片,加载完后才显示出来,体验较差。

 

    3.  改进:在线视频栏目在多个网站之间切换时后退混乱的问题

未改前使用WebView默认的前进后退功能,使用中发现切换后还是会出现后退混乱的状况。注意clearHistory不能清除当前的url。

修改参照帖子,这里。 注意需要判断链接是否相同,即:

           if (!mHistory.contains(url))
                mHistory.add(0, url);

 

    4.  新增:显示正在加载的url

 

    5.  新增:删除、重命名视频文件

基础功能。

复制代码
     /**  删除文件  */
     private  void deleteFile( final FileAdapter adapter,  final PFile f,  final  int position) {
         new AlertDialog.Builder(getActivity()).setIcon(android.R.drawable.ic_dialog_alert).setTitle(R.string.file_delete).setMessage(getString(R.string.file_delete_confirm, f.title)).setNegativeButton(android.R.string.yes,  new DialogInterface.OnClickListener() {
            @Override
             public  void onClick(DialogInterface dialog,  int which) {
                 try {
                    File file =  new File(f.path);
                     if (file.canRead() && file.exists())
                        file.delete();
                    FileBusiness.deleteFile(getActivity(), f);
                    adapter.delete(position);
                }  catch (Exception e) {

                }
            }

        }).setPositiveButton(android.R.string.no,  null).show();
    }

     /**  重命名文件  */
     private  void renameFile( final FileAdapter adapter,  final PFile f,  final  int position) {
         final EditText et =  new EditText(getActivity());
        et.setText(f.title);
         new AlertDialog.Builder(getActivity()).setTitle(R.string.file_rename).setIcon(android.R.drawable.ic_dialog_info).setView(et).setNegativeButton(android.R.string.yes,  new DialogInterface.OnClickListener() {

            @Override
             public  void onClick(DialogInterface dialog,  int which) {
                String name = et.getText().toString().trim();
                 if (name ==  null || name.trim().equals("") || name.trim().equals(f.title))
                     return;

                 try {
                    File fromFile =  new File(f.path);
                    File nf =  new File(fromFile.getParent(), name.trim());
                     if (nf.exists()) {
                        Toast.makeText(getActivity(), R.string.file_rename_exists, Toast.LENGTH_LONG).show();
                    }  else  if (fromFile.renameTo(nf)) {
                        f.title = name;
                        f.path = nf.getPath();
                        FileBusiness.renameFile(getActivity(), f);
                        adapter.notifyDataSetChanged();
                    }
                }  catch (SecurityException se) {
                    Toast.makeText(getActivity(), R.string.file_rename_failed, Toast.LENGTH_LONG).show();
                }
            }

        }).setPositiveButton(android.R.string.no,  null).show();
复制代码

    } 

 

    6.  修正:使用WebView播放视频时无法关闭的问题

使用浏览器的flash插件播放视频时可能会有此问题。

 

    7.  改进:下载视频显示对应视频标题名称

未改前下载视频为一长串数字。

 

  三、下载
     至本章节往后,代码均不再提供下载,请移步 Google Code:
      http://code.google.com/p/android-oplayer

  无法访问请尝试地址:https://over140@android-oplayer.googlecode.com/hg/ ,参照这里

 

  四、Vitamio公告

     正式建立Vitamio开发者联盟QQ群!群号为: 246969281
      注意: 目前仅接受已经开发基于Vitamio产品的开发者申请加入 ,申请理由请填写产品的名词和链接,获取最新进展以及与Vitamio作者直接交流机会!

 

结束

 周日了才把这篇补上,总算没有食言,也让想起了2010-2011年翻译组每周一篇的承诺,坚持到今年才转向Wiki,感概万分。很多事件能坚持就坚持,感谢大家的支持!后续还将继续优化和增加新的功能,如题所说:“打造自己的万能播放器”!


转载:http://www.cnblogs.com/over140/archive/2012/07/08/2572748.html

目录
相关文章
|
1月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
206 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
2月前
|
存储 消息中间件 人工智能
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
232 10
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
|
8月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
2013 77
|
6月前
|
缓存 编解码 Android开发
Android内存优化之图片优化
本文主要探讨Android开发中的图片优化问题,包括图片优化的重要性、OOM错误的成因及解决方法、Android支持的图片格式及其特点。同时介绍了图片储存优化的三种方式:尺寸优化、质量压缩和内存重用,并详细讲解了相关的实现方法与属性。此外,还分析了图片加载优化策略,如异步加载、缓存机制、懒加载等,并结合多级缓存流程提升性能。最后对比了几大主流图片加载框架(Universal ImageLoader、Picasso、Glide、Fresco)的特点与适用场景,重点推荐Fresco在处理大图、动图时的优异表现。这些内容为开发者提供了全面的图片优化解决方案。
270 1
|
移动开发 监控 前端开发
构建高效Android应用:从优化布局到提升性能
【7月更文挑战第60天】在移动开发领域,一个流畅且响应迅速的应用程序是用户留存的关键。针对Android平台,开发者面临的挑战包括多样化的设备兼容性和性能优化。本文将深入探讨如何通过改进布局设计、内存管理和多线程处理来构建高效的Android应用。我们将剖析布局优化的细节,并讨论最新的Android性能提升策略,以帮助开发者创建更快速、更流畅的用户体验。
192 10
|
8月前
|
存储 编解码 开发工具
Android平台毫秒级低延迟HTTP-FLV直播播放器技术探究与实现
本文详细探讨了在Android平台上实现HTTP-FLV播放器的过程。首先介绍了FLV格式的基础,包括文件头和标签结构。接着分析了HTTP-FLV传输原理,通过分块传输实现流畅播放。然后重点讲解了播放器的实现步骤,涵盖网络请求、数据解析、音视频解码与渲染,以及播放控制功能的设计。文章还讨论了性能优化和网络异常处理的方法,并总结了HTTP-FLV播放器的技术价值,尤其是在特定场景下的应用意义。
377 11
|
存储 缓存 编解码
Android经典面试题之图片Bitmap怎么做优化
本文介绍了图片相关的内存优化方法,包括分辨率适配、图片压缩与缓存。文中详细讲解了如何根据不同分辨率放置图片资源,避免图片拉伸变形;并通过示例代码展示了使用`BitmapFactory.Options`进行图片压缩的具体步骤。此外,还介绍了Glide等第三方库如何利用LRU算法实现高效图片缓存。
205 20
Android经典面试题之图片Bitmap怎么做优化
|
Java Android开发 UED
安卓应用开发中的内存管理优化技巧
在安卓开发的广阔天地里,内存管理是一块让开发者既爱又恨的领域。它如同一位严苛的考官,时刻考验着开发者的智慧与耐心。然而,只要我们掌握了正确的优化技巧,就能够驯服这位考官,让我们的应用在性能和用户体验上更上一层楼。本文将带你走进内存管理的迷宫,用通俗易懂的语言解读那些看似复杂的优化策略,让你的开发之路更加顺畅。
331 33
|
监控 算法 数据可视化
深入解析Android应用开发中的高效内存管理策略在移动应用开发领域,Android平台因其开放性和灵活性备受开发者青睐。然而,随之而来的是内存管理的复杂性,这对开发者提出了更高的要求。高效的内存管理不仅能够提升应用的性能,还能有效避免因内存泄漏导致的应用崩溃。本文将探讨Android应用开发中的内存管理问题,并提供一系列实用的优化策略,帮助开发者打造更稳定、更高效的应用。
在Android开发中,内存管理是一个绕不开的话题。良好的内存管理机制不仅可以提高应用的运行效率,还能有效预防内存泄漏和过度消耗,从而延长电池寿命并提升用户体验。本文从Android内存管理的基本原理出发,详细讨论了几种常见的内存管理技巧,包括内存泄漏的检测与修复、内存分配与回收的优化方法,以及如何通过合理的编程习惯减少内存开销。通过对这些内容的阐述,旨在为Android开发者提供一套系统化的内存优化指南,助力开发出更加流畅稳定的应用。
388 31
|
Java 程序员 开发工具
Android|修复阿里云播放器下载不回调的问题
虽然 GC 带来了很多便利,但在实际编码时,我们也需要注意对象的生命周期管理,该存活的存活,该释放的释放,避免因为 GC 导致的问题。
152 2

热门文章

最新文章