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的一个文件中,如图所示,文件名可以修改。
③在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);
}
});
}