Android上面做Flash播放器
有這樣一個需求,做一個flash視訊播放器。
Android2.2之後才支援安裝Flash外掛並在WebView播放Flash視訊,初步想法是給Activity設定一個全屏的WebView,然後傳入一個Flash地址。後來發現了一些問題,慢慢才理清。
一、 直接呼叫webView.loadUrl並傳入Flash地址,在我的定製機器上面,有時會出現白屏(無聲音無影象)。
二、 把Flash地址包裝到一個HTML頁面中,再呼叫webView.loadData傳入這個頁面資料。這個在2.X上面沒有問題可以執行,但是FrameLayout或RelativeLayout都不能把我想新增的LOGO放到螢幕的左上角,而是把
三、 直接呼叫系統瀏覽器,把flash地址扔進去。這個簡單暴力,但確實能把問題丟擲去。
Intent intent2 = new Intent(Intent.ACTION_VIEW, Uri.parse(flash_url));
startActivity(intent2);
另外,開啟硬體加速前發現100%白屏,開啟後就好多了。
不管是程式重啟還是白屏,都是針對特定機器而言,最重要的還是多記下來幾個方案。
參考網址:
各瀏覽器下使用 OBJECT 元素和 EMBED 元素嵌入 Flash 存在差異
http://www.w3help.org/zh-cn/causes/HO8001
Android WebView使用
http://trinea.iteye.com/blog/1152557
補充於:2011.11.17
無論是使用哪種方式載入Flash,開始播放之前會有一個閃屏的現象,經歷分析和查詢資料,是因為flash外掛生一個SurfaceView加入到WebView當中,然後在這個SurfaceView中繪製內容,而這個SurfaceView的背景是白色的,在正式繪製出內容之前,會先顯示白屏了。
我試著覆蓋WebView.drawChild方法看能不能監聽到什麼時候開始繪製,但這個方法根本不會呼叫。也就是說,flash外掛生成的根本就沒有生成SurfaceView,或者雖然生成但沒有加入到WebView的中去。
參考資料:
Screen blinking when using a webview with flash
http://stackoverflow.com/questions/5095977/screen-blinking-when-using-a-webview-with-flash
Android瀏覽器外掛技術的應用研究
http://www.docin.com/p-238856627.html
補充於:2011.11.18
Flash外掛的packageName是com.adobe.flashplayer,Service名字是com.adobe.flashplayer.FlashPaintSurface
可以通過這些資訊來檢測是否安裝了Flash外掛:
PackageManager pm = getPackageManager();
List<PackageInfo> infoList = pm
.getInstalledPackages(PackageManager.GET_SERVICES);
PackageInfo flashInfo = null;
for (PackageInfo info : infoList) {
if ("com.adobe.flashplayer".equals(info.packageName)) {
flashInfo = info;
System.out.println("name" + flashInfo.versionName);
}
}
if (flashInfo == null) {
return;
}
另外,可以還可以檢測出使用者安裝的Flash的版本號:
private boolean isFlashPluginOut(PackageInfo flashInfo) {
String v1 = flashInfo.versionName.replace(".", "");
String v2 = "10.3.185.21".replace(".", "");
return v1.compareTo(v2) < 0;
}
如果版本過低可以定向到Market:
private void gotoMarket() {
Intent installIntent = new Intent("android.intent.action.VIEW");
installIntent.setData(Uri
.parse("market://details?id=com.adobe.flashplayer"));
startActivity(installIntent);
}
參考網址:
呼叫market搜尋軟體
http://bashenmail.iteye.com/blog/603764