做了个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();
}
}
}
结果是一点页面中的“播放”链接,就跳出了应用,也不报个错:(
高分求教!!!介是肿么了?

解决方案 »

  1.   

    直接在js中调用java中的播放函数是不行的,js和java交互,只是单纯意义上的传递参数,所以你不能直接在js上调用java中的逻辑处理函数,只能通过特定的函数将参数从js传递到java(这里传递,肯定是传递url了),再由java来处理播放逻辑。
      

  2.   

    我传的就是url,播放逻辑是java来处理的。
      

  3.   

    我也在找这个问题:http://www.iteye.com/problems/31557 看看这个不过我没看懂,希望你完成后贴出实现代码