在同一Webview活动中使用两个意图启动Youtube视频

时间:2014-02-22 13:42:44

标签: android-intent webview youtube android-webview

我正在尝试通过youtube应用播放youtube视频,这些视频在我的网页浏览中是youtube链接,但我用google搜索它,我没有得到任何解决方案打开或启动youtube活动强迫我提出这个问题

我已尝试过下面的代码,但它只是强制关闭,可能是因为我已经在我的网页视图中有另一个意图了。

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube://" + video_id);
startActivity(intent);

顶级代码正在关闭我的应用程序。

我的另一个目的就是完美地播放与播放与youtube无关的其他格式的视频。

我想让我的youtube链接在youtube应用中播放,但我无法做到,因为某处出现了问题。

Main.java

import java.util.List;

import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings.PluginState;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ResolveInfo;



@SuppressLint("SetJavaScriptEnabled")

public class Main extends Activity {


    public final boolean networkCheck() {
        ConnectivityManager connec =  (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
    // ARE WE CONNECTED TO THE NET
    if ( connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED ||
    connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTING ||
    connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING ||
    connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED ) {
        return true;
    } else if ( connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED || connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED  ) {
        return false;
    }
    return false;
}

    WebView mWebView;



    ProgressBar loadingProgressBar,loadingTitle;


    @SuppressWarnings("deprecation")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


    mWebView = (WebView) findViewById(R.id.webview);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.getSettings().setBuiltInZoomControls(true);
    mWebView.getSettings().setPluginState(PluginState.ON);
    mWebView.setWebChromeClient(new WebChromeClient());
    mWebView.loadUrl("http://..(my webview link goes here).......html");

    loadingProgressBar=(ProgressBar)findViewById(R.id.progressbar_Horizontal); 

    mWebView.setWebChromeClient(new WebChromeClient() {

    // this will be called on page loading progress

    @Override

    public void onProgressChanged(WebView view, int newProgress) {

    super.onProgressChanged(view, newProgress);


    loadingProgressBar.setProgress(newProgress);
    //loadingTitle.setProgress(newProgress);
    // hide the progress bar if the loading is complete

    if (newProgress == 100) {
    loadingProgressBar.setVisibility(View.GONE);

    } else{
    loadingProgressBar.setVisibility(View.VISIBLE);

    }

    }

    });




    mWebView.setWebViewClient(new WebViewClient());



    mWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));

            List<ResolveInfo> infos = getPackageManager().queryIntentActivities(intent, 0);

            if (infos.size() == 0) {
                // apparently nothing can handle this URL
                return false;
            }

            for (ResolveInfo info : infos) {
                if (info.activityInfo.packageName.equals("com.android.browser")) {
                    view.loadUrl(url);
                    return true;
                }
            }

            startActivity(intent);
            return true;
        }
    });

    if(networkCheck()) {

        // INTERNET IS AVAILABLE, DO STUFF..

        } else {
    mWebView.setWebViewClient(new WebViewClient() {
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            mWebView.loadUrl("file:///android_asset/myerrorpage.html");

        }
    });
}

    if(networkCheck()) {

        // INTERNET IS AVAILABLE, DO STUFF..

        } else {
            AlertDialog alertDialog = new AlertDialog.Builder(Main.this).create();
            alertDialog.setTitle("Internet Disconnected");
            alertDialog.setMessage("No Internet Connection,Enable Internet connection to access the App");

            alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
            } });
            alertDialog.show();
        }

    }
@Override
public boolean onKeyDown(final int keyCode, final KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
        mWebView.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

@Override
public void onUserLeaveHint() {
    finish();
}


}

不建议我使用youtube api因为我对此不感兴趣。

任何帮助将不胜感激。

先谢谢。

1 个答案:

答案 0 :(得分:0)

您可以共享崩溃堆栈跟踪吗?它应该在logcat中可用。然后我可以根据需要改进答案。我看到了代码中的几个问题,如图所示。

  1. Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("vnd.youtube://" + video_id); Youtube URI的方案不是分层的,您应该删除//
  2. 您正在设置多个WebViewClient实例,这些实例将相互覆盖。这真的是你想要的行为吗?