我有一个简单的Android应用程序,可以打开webview来调用Web应用程序 我想在Web应用程序有window.close();
时关闭整个Android应用程序我还希望后退键能够在网页中导航回来,这是有效的。
窗口正在关闭,但应用程序未关闭且日志未更新。我认为onWindowClose由于某种原因没有被触发。
这是我的Android应用程序 -
import java.util.HashMap;
import java.util.Map;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.KeyEvent;
import android.os.Bundle;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends Activity {
protected static final String TAG = null;
private WebView webView;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(event.getAction() == KeyEvent.ACTION_DOWN){
switch(keyCode)
{
case KeyEvent.KEYCODE_BACK:
if(webView.canGoBack()){
webView.goBack();
}else{
finish();
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Map<String,String> extraHeaders = new HashMap<String, String>();
extraHeaders.put("X-Requested-With", "MY-App");
//webview use to call own site
webView = (WebView) findViewById(R.id.webView1);
webView.setWebViewClient(new WebViewClient()); //use to hide the address bar
webView .getSettings().setJavaScriptEnabled(true);
webView .getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView .getSettings().setDomStorageEnabled(true); //to store history
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("http://www.Google.com",extraHeaders);
WebChromeClient wbc = new WebChromeClient(){
public void onCloseWindow(WebView webView){
super.onCloseWindow(webView);
Log.d(TAG, "Window trying to close");
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
}
};
webView.setWebChromeClient(wbc);
;
}
这是Manifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.google"
android:versionCode="1"
android:versionName="1.0"
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/Google"
android:theme="@style/AppTheme"
android:noHistory="true"
android:excludeFromRecents="true"
>
<activity
android:name="com.example.google.MainActivity"
android:label="@string/app_name"
android:clearTaskOnLaunch="true"
android:configChanges="orientation|keyboard|keyboardHidden|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>'
感谢您的帮助!
答案 0 :(得分:0)
行。我做了一些研究,发现某些浏览器禁用了window.close()。我真的只想在人们退出网站时关闭应用程序。
在网站php注销我添加了这个。
// return to main page
header('Location: https://www.mainpage.com/');
然后我将MainActivity.Java改为:
package com.example.mainpage;
import java.util.HashMap;
import java.util.Map;
import android.app.Activity;
import android.util.Log;
import android.view.KeyEvent;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends Activity {
protected static final String TAG = null;
private WebView webView;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(event.getAction() == KeyEvent.ACTION_DOWN){
switch(keyCode)
{
case KeyEvent.KEYCODE_BACK:
if(webView.canGoBack()){
// Log.d(TAG, "Before Go Back");
webView.goBack();
}else{
// Log.d(TAG, "Before Finish");
finish();
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
public class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.equals("https://www.mainpage.com/")) {
// Log.d(TAG, "Override");
// Log.d("TAG", url);
// Log.d(TAG, "Logging Out");
// Log.d(TAG, "Before Finish");
finish();
return true;
}
else {
// Otherwise, give the default behavior (open in browser)
//Log.d(TAG, "Do Not Override");
//Log.d("TAG", url);
// Log.d(TAG, "loading page");
return false;
}
}
}
public void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "In On Create");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Map<String,String> extraHeaders = new HashMap<String, String>();
extraHeaders.put("X-Requested-With", "MY-App");
webView = (WebView) findViewById(R.id.webView1);
webView .getSettings().setJavaScriptEnabled(true);
webView .getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView .getSettings().setDomStorageEnabled(true); //to store history
webView.loadUrl("https://www.mainpage.com/Login.php",extraHeaders);
webView.setWebViewClient(new MyWebViewClient());
};
}