天天看点

AndroidStudio加载网页游戏AndroidStudio加载网页游戏的方法

AndroidStudio加载网页游戏的方法

  网页游戏可以实现PC端的加载,如何将网页游戏变为手机端的游戏,通过以下方式实现。

①创建一个Activity,在布局中添加webview控件,加载显示网页,在Activity中编写代码

<WebView
    android:id="@+id/webView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
/>
           
webView = findViewById(R.id.webView);//加载控件
initWebView(webView);//初始化方法
webView.loadUrl(GameURL);//加载网页

private void initWebView(final WebView webView) {
    webView.getSettings().setJavaScriptEnabled(true);
    // 设置可以支持缩放
    webView.getSettings().setSupportZoom(true);

    webView.getSettings().setUseWideViewPort(true);
    //自适应屏幕       

    webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING);
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setDomStorageEnabled(true);

    webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadURL(url);
        return true;
    }
});
           

②将编写好的网页游戏(例如construct制作的游戏)导出,目录复制到assets的一个文件中,如图所示,文件名可以修改。

AndroidStudio加载网页游戏AndroidStudio加载网页游戏的方法

③在Activity中找到该文件,getResources().getAssets().open()的方式加载,代码如下

InputStream is = null;
String substring = request.substring(GameURL.length());//GameURL游戏的地址
if (substring == null || substring.length() <= 1) {
    substring = "/index.html";
}
try {
    AssetManager am = getResources().getAssets();
    String prefix = "stickman1_export";//游戏存放的文件夹名
    is = am.open(prefix + substring);//打开文件夹
    WebResourceResponse res = new WebResourceResponse(contentType(substring), "utf-8", is);
    return res;
} catch (FileNotFoundException e) {
    Log.e(TAG, "", e);
} catch (Throwable e) {
    Log.e(TAG, "", e);
}
   
           

④在AndroidManifest 中添加权限:<uses-permission android:name="android.permission.INTERNET"/>

<manifest>

    <uses-permission android:name="android.permission.INTERNET"/>

    <application
    </application>
</manifest>
           

完整代码如下:

public class MainActivity extends Activity {
    private WebView webView = null;
    private String GameURL = "http://127.0.0.1";
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        webView = findViewById(R.id.webView);
        initWebView(webView);
        webView.loadUrl(GameURL);
    }

    private void initWebView(final WebView webView) {

        webView.getSettings().setJavaScriptEnabled(true);
        // 设置可以支持缩放
        webView.getSettings().setSupportZoom(true);

        webView.getSettings().setUseWideViewPort(true);
        //自适应屏幕       
        webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING);
        webView.getSettings().setLoadWithOverviewMode(true);
        webView.getSettings().setDomStorageEnabled(true);

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadURL();
                return true;
            }

            @Override
            public WebResourceResponse shouldInterceptRequest(WebView view, String request) {
                if (request.startsWith(GameURL)) {
                    InputStream is = null;
                    String substring = request.substring(GameURL.length());//GameURL游戏的地址
                if (substring == null || substring.length() <= 1) {
                    substring = "/index.html";
                }
                try {
                    AssetManager am = getResources().getAssets();
                    String prefix = "stickman1_export";//游戏存放的文件夹名
                    is = am.open(prefix + substring);//打开文件夹
                    WebResourceResponse res = new WebResourceResponse(contentType(substring), "utf-8", is);
                    return res;
                } catch (FileNotFoundException e) {
                    Log.e(TAG, "", e);
                } catch (Throwable e) {
                    Log.e(TAG, "", e);
                }
            }
            return super.shouldInterceptRequest(view, request);
        }
    });
}