2011-05-22 25 views
0

如果您在Android瀏覽器中打開一個mp3網址,您會看到一個「完成操作使用...」對話窗口,提供兩個選項:「音樂播放器」或「瀏覽器」。如果您選擇「瀏覽器」,它會將mp3下載到設備。Android:「完整操作使用...」在自定義WebView上運行ACTION_VIEW意圖上的一個mp3網址

我試圖從我的應用程序內實現相同。 我使用帶有setWebViewClient的WebView到具有shouldOverrideUrlLoading方法的WebViewClient類(如所有示例中所示)。該方法在mp3 url上使用ACTION_VIEW intent來檢查「mp3」擴展和startActivity(intent)。

@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    String lowcaseurl = url.toLowerCase(); 
    if (lowcaseurl.endsWith(".mp3")) { 
     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
     view.getContext().startActivity(intent); 
     return true; 
    } 
    else { 
     view.loadUrl(url); 
    } 
    return super.shouldOverrideUrlLoading(view, url) 
} 

顯示「完成操作:使用」對話窗口 - ,如果讓我選擇「瀏覽器」,然後打開瀏覽器,但沒有得到URL!它只是打開瀏覽器,並進入默認的「主頁網址」(這是google.com在這種情況下)...

任何幫助將不勝感激。

+0

顯示你正在使用的意圖的代碼? – Femi 2011-05-22 16:22:18

+0

我編輯並添加了一段代碼,它代表了我代碼中的相關部分... – 2011-05-23 10:11:55

+0

我相信[this](http://code.google.com/p/android/issues/detail?id=15673)描述了「幕後」出現這種情況的原因,但我還沒有找到解決方案,並且仍在嘗試......:\「 – 2011-05-24 22:01:55

回答

0

找不到直接解決方案,但使用了一種解決方法。 我已經想出瞭如何強制音樂播放器加載網址(沒有給你選擇通過瀏覽器打開它),或者啓動直接下載文件。

要強制音樂播放器加載網址:

//...considering url contains the url string... 
Intent intent = new Intent(android.content.Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.parse(url), "audio/*"); 
startActivity(intent); 

要強制下載的開始:

您需要實現服務器端this技術.. 但有一些例外:

內容類型標題實際上應該包含右邊的mime類型文件(而不是「application/octet-stream」)。此外,最好也發送一個「內容長度」標題與文件大小 - 否則可能有下載問題。

如果使用aspx:Response.TransmitFile比Response.WriteFile更好 - 在這種情況下,Response.Buffer應該設置爲false。

0

您可以使用:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
view.getContext().startActivity(Intent.createChooser(intent, "Open...")); 

這樣,你強迫對話「完成......」

相關問題