前言
成功的產品往往在細節之處也做到極致,產品和項目從使用的角度來看最大的區別我認為也就是細節的處理上。開播視頻的目標是產品,前面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;
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);
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();
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,感概萬分。很多事件能堅持就堅持,感謝大家的支持!后續還將繼續優化和增加新的功能,如題所說:“打造自己的萬能播放器”!
