100分求:通过webview的本地html5播放mp3问题。

nanke 2012-09-27 03:23:12
做了个APP,目的是通过webview的本地html页播放mp3.

第一种方法想用html5的<audio>
<audio controls="controls">
<source src="song.ogg" type="audio/ogg">
<source src="song.mp3" type="audio/mpeg">
Your browser does not support the audio element.
</audio>
结果是不播放。

第二种方法想用js调用一个负责mp3播放的类
布局文件main.xml
<?xml version="1.0" encoding="utf-8"?>
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
html文件:index.html
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<script language="javascript">
var count=0;
function play(obj)
{
musicplayer.playMusic(obj.getAttribute("title"));
}
</script>
<a title="http://192.168.1.12/ebook/mp3/song.mp3" onClick="play(this);">播放</a>
</body></html>
Activity文件:
package www.gs.test23;

import www.gs.test23.R;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;


public class MainActivity extends Activity {
/** Called when the activity is first created. */
private WebView myWebView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new WebViewClient());
myWebView.setVerticalScrollbarOverlay(true);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
myWebView.getSettings().setAppCacheEnabled(false);
myWebView.getSettings().setSupportZoom(true);
myWebView.getSettings().setBuiltInZoomControls(true);
myWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);//
myWebView.addJavascriptInterface(new PlayMusicInterface(this), "musicplayer");
myWebView.loadUrl("file:///android_asset/index.html");
}
}
播放的java类:
package www.gs.test23;

import java.io.IOException;

import android.content.Context;
import android.media.MediaPlayer;

public class PlayMusicInterface
{
private Context context=null;
private MediaPlayer mediaPlayer=null;
public PlayMusicInterface(Context context){
this.context=context;
mediaPlayer=new MediaPlayer();
}

public void stopMusic()
{
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
}

public void playMusic(String url){
if(mediaPlayer.isPlaying())
{
mediaPlayer.reset();
}
try{
mediaPlayer.setDataSource(url);
mediaPlayer.prepare();
mediaPlayer.start();
}catch (IllegalArgumentException e) {
e.printStackTrace();
}catch (IllegalStateException e) {
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
}
结果是一点页面中的“播放”链接,就跳出了应用,也不报个错:(
高分求教!!!介是肿么了?
...全文
394 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
皑雪 2013-04-27
  • 打赏
  • 举报
回复
我也在找这个问题:http://www.iteye.com/problems/31557 看看这个不过我没看懂,希望你完成后贴出实现代码
nanke 2012-09-27
  • 打赏
  • 举报
回复
我传的就是url,播放逻辑是java来处理的。
流星叶雨 2012-09-27
  • 打赏
  • 举报
回复
直接在js中调用java中的播放函数是不行的,js和java交互,只是单纯意义上的传递参数,所以你不能直接在js上调用java中的逻辑处理函数,只能通过特定的函数将参数从js传递到java(这里传递,肯定是传递url了),再由java来处理播放逻辑。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧