使用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,感概萬分。很多事件能堅持就堅持,感謝大家的支持!后續還將繼續優化和增加新的功能,如題所說:“打造自己的萬能播放器”!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM