天天看點

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);
        }
    });
}