Hello其他程序员。一些背景信息,我对Android应用程序开发很新,并决定在个人项目上练习我的手。在项目工作中,我遇到的大多数问题都可以通过各种Google搜索来克服它们。然而,这一问题在很长一段时间内仍然存在。
我想在网页浏览中显示YouTube频道。我已经研究过其他相关论坛,但没有找到合适的解决方案。如果您想要一个有效的例子,请查看“Markiplier Unofficial App”,它使用webview来显示和播放他的YouTube视频。以下是我此次活动的代码。
Webview布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/userOptionsLinearLayout"
android:background="#000000">
<WebView
android:id="@+id/activity_main_webview"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal|bottom" />
</LinearLayout>
Custom WebViewClient:
import android.webkit.WebViewClient;
import android.webkit.WebView;
import android.net.Uri;
import android.content.Intent;
public class AJSYTWebViewClient extends WebViewClient{
String site_url_one = "www.youtube.com";
String site_url_two = "m.youtube.com";
// Used to judge which URL to keep open in app and which ones to divert to web browser or another app.
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(Uri.parse(url).getHost().startsWith(site_url_one) || Uri.parse(url).getHost().startsWith(site_url_two)) {
return false; // Ensures URL opens in app
}
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
view.getContext().startActivity(intent);
return true;
}
}
WebView活动:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
public class ajs_youtube_page extends AppCompatActivity {
// Declaring Programming Webview variable.
private WebView mwebView;
// Primary URL.
String url = "www.youtube.com/user/AngryJoeShow";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ajs_youtube_page);
// Finding webview on layout screen.
mwebView = (WebView) findViewById(R.id.activity_main_webview);
//mwebView.setWebChromeClient(new WebChromeClient());
// Getting and adjusting WebView settings for javascript functionality.
WebSettings webSettings = mwebView.getSettings();
webSettings.setJavaScriptEnabled(true);
//webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
// Force links and redirects to open in the WebView instead of in a browser
mwebView.setWebViewClient(new AJSYTWebViewClient());
mwebView.loadUrl(url);
}
// When the back button is pressed, it goes back to the previous screen.
@Override
public void onBackPressed() {
if(mwebView.canGoBack()) {
mwebView.goBack();
}
else {
super.onBackPressed();
}
}
}
非常感谢有关此问题的任何指导。
感谢。
答案 0 :(得分:0)
将您的网址从www.youtube.com更改为https://www.youtube.com/
答案 1 :(得分:0)
更新您的代码,如下所示:
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getHost().startsWith(site_url_one) || Uri.parse(url).getHost().startsWith(site_url_two)) {
view.loadUrl(url);
return true; // Ensures URL opens in app
} else {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
view.getContext().startActivity(intent);
return true;
}
}
答案 2 :(得分:0)
好的,所以在阅读了每个人的答案/建议并尝试了之后,不幸的是他们没有工作。继续进行另一项研究,我终于找到了解决方案。请记住,这不是表现最佳的方法,但对于像我这样的新学习者来说,它是有效的。
您需要将以下代码添加到调用webview布局的活动中:
webSettings.setDomStorageEnabled(true);
我希望这有助于某人。下面是我在这个答案中找到的问题的链接/网址(惊讶它一直避开我的眼睛):Android webview won't load my URL but will load others
感谢所有回复的人。感谢您的意见。