Android 使用Vitamio打造自己的萬(wàn)能播放器(6)——在線(xiàn)播放(播放列表)
前言
新版本的VPlayer由設(shè)計(jì)轉(zhuǎn)入開(kāi)發(fā)階段,預(yù)計(jì)開(kāi)發(fā)周期為一個(gè)月,這也意味著新版本的Vitamio將隨之發(fā)布,開(kāi)發(fā)者們可以和本系列文章一樣,先開(kāi)發(fā)其他功能。本章內(nèi)容為"在線(xiàn)視頻播放列表",集合了主流各大視頻網(wǎng)站的手機(jī)版,歡迎給"開(kāi)播視頻"反饋改進(jìn)建議!
系列
1、Android 使用Vitamio打造自己的萬(wàn)能播放器(1)——準(zhǔn)備
2、Android 使用Vitamio打造自己的Android萬(wàn)能播放器(2)—— 手勢(shì)控制亮度、音量、縮放
3、Android 使用Vitamio打造自己的Android萬(wàn)能播放器(3)——本地播放(主界面、視頻列表)
4、Android 使用Vitamio打造自己的Android萬(wàn)能播放器(4)——本地播放(快捷搜索、數(shù)據(jù)存儲(chǔ))
5、Android 使用Vitamio打造自己的Android萬(wàn)能播放器(5)——在線(xiàn)播放(播放優(yōu)酷視頻)
正文
一、目標(biāo)
集成各大視頻網(wǎng)站的手機(jī)版,截圖:

二、實(shí)現(xiàn)代碼
public class FragmentOnline extends FragmentBase implements OnItemClickListener {
/** 緩存視頻列表 */
private static ArrayList<String[]> mOnlineList = new ArrayList<String[]>();
/** 緩存視頻LOGO列表 */
private static ArrayList<Integer> mOnlineLogoList = new ArrayList<Integer>();
private WebView mWebView;
private ListView mListView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View mView = inflater.inflate(R.layout.fragment_online, container,
false);
mListView = (ListView) mView.findViewById(android.R.id.list);
mWebView = (WebView) mView.findViewById(R.id.webview);
mListView.setOnItemClickListener(this);
initWebView();
mListView.setAdapter(new DataAdapter(getActivity()));
return mView;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
final String[] f = mOnlineList.get(position);
mWebView.clearView();
mWebView.loadUrl(f[1]);
mWebView.clearHistory();
mListView.setVisibility(View.GONE);
mWebView.setVisibility(View.VISIBLE);
}
@Override
public boolean onBackPressed() {
if (mListView == null || mListView.getVisibility() == View.VISIBLE)
return super.onBackPressed();
else {
mListView.setVisibility(View.VISIBLE);
mWebView.setVisibility(View.GONE);
return true;
}
}
/** 初始化WebView */
private void initWebView() {
mWebView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setPluginsEnabled(true);
mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
};
/** 頁(yè)面跳轉(zhuǎn) */
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (FileUtils.isVideoOrAudio(url)) {
Intent intent = new Intent(getActivity(),
VideoPlayerActivity.class);
intent.putExtra("path", url);
startActivity(intent);
return true;
}
return false;
};
});
mWebView.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView != null
&& mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
return false;
}
});
}
private class DataAdapter extends ArrayAdapter<String[]> {
public DataAdapter(Context ctx) {
super(ctx, mOnlineList);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final String[] f = getItem(position);
if (convertView == null) {
final LayoutInflater mInflater = getActivity()
.getLayoutInflater();
convertView = mInflater.inflate(R.layout.fragment_online_item,
null);
}
((ImageView) convertView.findViewById(R.id.thumbnail))
.setImageResource(mOnlineLogoList.get(position));
((TextView) convertView.findViewById(R.id.title)).setText(f[0]);
return convertView;
}
}
static {
// 120 60
mOnlineList.add(new String[] { "優(yōu)酷視頻", "http://3g.youku.com" });
mOnlineLogoList.add(R.drawable.logo_youku);
// 104 43
mOnlineList.add(new String[] { "搜狐視頻", "http://m.tv.sohu.com" });
mOnlineLogoList.add(R.drawable.logo_sohu);
//
mOnlineList.add(new String[] { "樂(lè)視TV", "http://m.letv.com" });
mOnlineLogoList.add(R.drawable.logo_letv);
// 174 48
mOnlineList.add(new String[] { "愛(ài)奇異", "http://3g.iqiyi.com/" });
mOnlineLogoList.add(R.drawable.logo_iqiyi);
mOnlineList.add(new String[] { "PPTV", "http://m.pptv.com/" });
mOnlineLogoList.add(R.drawable.logo_pptv);
// 181 60
mOnlineList.add(new String[] { "騰訊視頻", "http://3g.v.qq.com/" });
mOnlineLogoList.add(R.drawable.logo_qq);
mOnlineList.add(new String[] { "56.com", "http://m.56.com/" });
mOnlineLogoList.add(R.drawable.logo_56);
mOnlineList.add(new String[] { "新浪視頻", "http://video.sina.cn/" });
mOnlineLogoList.add(R.drawable.logo_sina);
mOnlineList.add(new String[] { "土豆視頻", "http://m.tudou.com" });
mOnlineLogoList.add(R.drawable.logo_tudou);
}
}
代碼說(shuō)明:
a). 各主流網(wǎng)站的3g版都提供了mp4格式的播放鏈接,這里集成即可。
b). 處理后退事件,按back鍵應(yīng)該先處理webview的網(wǎng)頁(yè)跳轉(zhuǎn)至上一頁(yè)。
c). 清空歷史記錄,切換各視頻網(wǎng)站時(shí)防止后退到其他網(wǎng)站。
其他代碼參考項(xiàng)目源碼。
三、其他更新日志
新增:?jiǎn)⒂昧诵碌腖OGO

修復(fù):播放完后自動(dòng)關(guān)閉窗口
修復(fù):切換本地視頻與在線(xiàn)視頻錯(cuò)誤的問(wèn)題
結(jié)束
再次提醒各位開(kāi)發(fā)者,使用Vitamio播放有問(wèn)題的視頻請(qǐng)使用最新版的VPlayer進(jìn)行測(cè)試,如果沒(méi)有問(wèn)題新版發(fā)布的Vitamio也不會(huì)有問(wèn)題。
- Android 使用Vitamio打造自己的萬(wàn)能播放器(10)—— 本地播放 (縮略圖、視頻信息、視頻掃描服務(wù))
- Android 使用Vitamio打造自己的萬(wàn)能播放器(9)—— 在線(xiàn)播放 (在線(xiàn)電視)
- Android 使用Vitamio打造自己的萬(wàn)能播放器(8)——細(xì)節(jié)優(yōu)化
- Android 使用Vitamio打造自己的萬(wàn)能播放器(7)——在線(xiàn)播放(下載視頻)
- Android 使用Vitamio打造自己的萬(wàn)能播放器(5)——在線(xiàn)播放(播放優(yōu)酷視頻)
- Android 使用Vitamio打造自己的萬(wàn)能播放器(4)——本地播放(快捷搜索、數(shù)據(jù)存儲(chǔ))
- Android 使用Vitamio打造自己的萬(wàn)能播放器(3)——本地播放(主界面、播放列表)
- Android 使用Vitamio打造自己的萬(wàn)能播放器(2)—— 手勢(shì)控制亮度、音量、縮放
- Android 使用Vitamio打造自己的萬(wàn)能播放器(1)——準(zhǔn)備
- Android使用vitamio插件實(shí)現(xiàn)視頻播放器
相關(guān)文章
Android開(kāi)發(fā)島嶼數(shù)量算法示例解析
這篇文章主要為大家介紹了Android開(kāi)發(fā)島嶼數(shù)量算法示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
Android 序列化的存儲(chǔ)和讀取總結(jié)及簡(jiǎn)單使用
這篇文章主要介紹了Android 序列化的存儲(chǔ)和讀取總結(jié)及簡(jiǎn)單使用的相關(guān)資料,Serializable接口和Parcelable接口,本文對(duì)這兩種方式進(jìn)行簡(jiǎn)單的總結(jié)和使用,需要的朋友可以參考下2016-12-12
Android客戶(hù)端與服務(wù)端數(shù)據(jù)加密傳輸方案詳解
這篇文章主要為大家介紹了Android客戶(hù)端與服務(wù)端數(shù)據(jù)加密傳輸方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Android中實(shí)現(xiàn)淘寶購(gòu)物車(chē)RecyclerView或LIstView的嵌套選擇的邏輯
這篇文章主要介紹了Android中實(shí)現(xiàn)淘寶購(gòu)物車(chē)RecyclerView或LIstView的嵌套選擇的邏輯,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-12-12
Android WebView上實(shí)現(xiàn)JavaScript與Java交互
這篇文章主要介紹了Android WebView上實(shí)現(xiàn)JavaScript與Java交互 的相關(guān)資料,需要的朋友可以參考下2016-03-03
Android 使用Gallery實(shí)現(xiàn)3D相冊(cè)(附效果圖+Demo源碼)
今天主要是說(shuō)說(shuō)如何實(shí)現(xiàn)Gallery的3D顯示切換,Demo的代碼很多是基于網(wǎng)上一些現(xiàn)成效果,感謝這些分享成果的開(kāi)發(fā)者2013-07-07
Android Binder進(jìn)程間通信工具AIDL使用示例深入分析
Binder作為Android 眾多的IPC通訊手段之一,在Framework的數(shù)據(jù)傳輸中起到極為關(guān)鍵的作用。Binder機(jī)制可謂是Android 知識(shí)體系里的重中之重,作為偏底層的基礎(chǔ)組件,平時(shí)我們很少關(guān)注它,而它卻是無(wú)處不在,也是Android 面試易考察的點(diǎn)之一2022-11-11
Android開(kāi)發(fā)中ProgressDialog簡(jiǎn)單用法示例
這篇文章主要介紹了Android開(kāi)發(fā)中ProgressDialog簡(jiǎn)單用法,結(jié)合實(shí)例形式分析了Android使用ProgressDialog的進(jìn)度條顯示與關(guān)閉、更新等事件響應(yīng)相關(guān)操作技巧,需要的朋友可以參考下2017-10-10

