美文网首页
Android:WebView加载H5游戏

Android:WebView加载H5游戏

作者: smooth_lgh | 来源:发表于2017-08-03 15:59 被阅读1316次
  • 首先需要在activity_main.xml文件里面添加WebView
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${relativePackage}.${activityClass}" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />
     <WebView 
       android:id="@+id/game_context"
       android:layout_width="match_parent"
       android:layout_height="match_parent"       
       />

</RelativeLayout>
  • AndroidManifest.xml文件里面添加相关权限
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.h5gameplay"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />  
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    
    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
  • 最后在MainActivity.java里面实现WebView的相关代码
public class MainActivity extends Activity {
    
    private String TAG = "MainActivity";
    private WebView gameWebView;
    private String rootUrl = "涉及公司隐私,所以H5游戏链接不能公布";
    static Activity instance;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        instance = this;
        init();
    }

@SuppressLint("JavascriptInterface")
    private void init()
    {
        //com.tencent.smtt.sdk.WebView
        gameWebView = (WebView) findViewById(R.id.game_context);  
        gameWebView.loadUrl(rootUrl);    
        WebSettings webSettings = gameWebView.getSettings(); 
        webSettings.setJavaScriptEnabled(true);  //支持js
        webSettings.setDomStorageEnabled(true);
        webSettings.setPluginState(WebSettings.PluginState.ON);
        webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH);  //提高渲染的优先级
//        设置自适应屏幕,两者合用
        webSettings.setUseWideViewPort(true);  //将图片调整到适合webview的大小
        webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
        webSettings.setSupportZoom(true);  //支持缩放,默认为true。是下面那个的前提。
        webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。
//若上面是false,则该WebView不可缩放,这个不管设置什么都不能缩放。
        webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件
        webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); //支持内容重新布局
        webSettings.supportMultipleWindows();  //多窗口
        webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);  //关闭webview中缓存
        webSettings.setAllowFileAccess(true);  //设置可以访问文件
        webSettings.setNeedInitialFocus(true); //当webview调用requestFocus时为webview设置节点
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
        webSettings.setLoadsImagesAutomatically(true);  //支持自动加载图片
         
        gameWebView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {

                Log.e(TAG, "shouldOverrideUrlLoading: " + url);
                boolean isGameUrl = url.indexOf("http://h5.wuzhiyou.com/game/api")!=-1;
                boolean isWxpay = url.indexOf("type=wxpay")!=-1;
                boolean isAlipay = url.indexOf("type=alipay")!=-1;
                if (isGameUrl&&isAlipay) {
                    Log.i(TAG,"the url ->"+url);
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent .setData(Uri.parse(url));
                    startActivity(intent);
                    return true;
                }
                if (isGameUrl&&isWxpay) {
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent .setData(Uri.parse(url));
                    startActivity(intent);
                    return true;

                }
                return super.shouldOverrideUrlLoading(view, url);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                
                Log.e(TAG, "onPageFinished: " + url);
                // 这个方法有可能会多次执行
                super.onPageFinished(view, url);
                if(url.startsWith("http://h5.wuzhiyou.com/game/gameStart?"))
                {
                  Context context = MainActivity.this;
                  String net=DeviceInfoTool.getNet(context);
                  int version=DeviceInfoTool.getOS_version();
                  String idString=DeviceInfoTool.getDeviceId(context);
                  String typeString=DeviceInfoTool.getDeviceType();
                  view.loadUrl("javascript:setNet('"+net+"','"+version+"','"+idString+"','"+typeString+"')");

                }
            }


            @Override
            public void onReceivedError(WebView view, int errorCode,
                                        String description, String failingUrl) {
                // TODO Auto-generated method stub
                super.onReceivedError(view, errorCode, description, failingUrl);
            }

        });
        
        gameWebView.setWebChromeClient(new WebChromeClient(){
            @Override
            public boolean onJsAlert(WebView view, String url, String message,
                    JsResult result) {
                // TODO Auto-generated method stub
                return super.onJsAlert(view, url, message, result);
            }
            
            @Override
            public boolean onJsConfirm(WebView view, String url,
                    String message, JsResult result) {
                // TODO Auto-generated method stub
                return super.onJsConfirm(view, url, message, result);
            }
            @Override
            public boolean onJsPrompt(WebView view, String url, String message,
                    String defaultValue, JsPromptResult result) {
                // TODO Auto-generated method stub
                return super.onJsPrompt(view, url, message, defaultValue, result);
            }
        });
        
        gameWebView.loadUrl(rootUrl);
        gameWebView.requestFocus();
    }
    
    @Override
    protected void onDestroy() {
        gameWebView.removeAllViews();
        gameWebView.destroy();
        super.onDestroy();
    }

    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && gameWebView.canGoBack()) {
            gameWebView.goBack();// 返回前一个页面
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
    
}

相关文章

网友评论

      本文标题:Android:WebView加载H5游戏

      本文链接:https://www.haomeiwen.com/subject/vluplxtx.html