אני נמצא בעיצומו של פיתוח אפליקציה לאנדרואיד, מבוססת webview ומושכת אתר של וורפרס.
יש לי שתי בעיות פשוטות, שכל אחד מכם קרוב לוודאי ייתקל בהן במידה ויפתח אפליקציה פשוטה שכזו -
- כאשר לוחצים על לינק שאמור להוביל לאתר אחר חיצוני שלא קשור לאפליקציה, הייתי רוצה שייפתח הדפדפן ולא שהאתר ייפתח בתוך ה webview.
- כאשר לוחצים על כפתור אחורה במכשיר, הייתי רוצה שהwebview ייקח אותי דף אחד אחורה בהיסטוריה שלו.
יש לי את הקוד לפיתרון שתי הבעיות, אבל אין לי את הידע להבין מה אני עושה לא בסדר, כי זה לא עובד....
package com.isegal.iati_biomed;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.provider.Settings;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
public class MainActivity extends Activity {
WebView webview;
@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//webview use to call own site
webview = (WebView)findViewById(R.id.webView);
webview.setWebViewClient(new MyWebViewClient());
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().getJavaScriptCanOpenWindowsAutomatically();
webview.clearView();
if (!isNetworkAvailable())
{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setCancelable(true);
builder.setMessage(R.string.no_connection);
builder.setTitle(R.string.no_connection_title);
builder.setPositiveButton(R.string.settings_button_text, new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
}
});
builder.setNegativeButton(R.string.cancel_button_text, new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
finish();
Toast.makeText(MainActivity.this, "Exit",
Toast.LENGTH_SHORT).show();
return;
}
});
builder.show();
}
}
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(url.contains("external")){ // Could be cleverer and use a regex
return super.shouldOverrideUrlLoading(view, url); // Leave webview and use browser
} else {
view.loadUrl(url); // Stay within this webview and load url
return true;
}
}
}
class backPressed extends MainActivity {
@Override
public void onBackPressed()
{
if(webview.canGoBack())
webview.goBack();
else
super.onBackPressed();
}
}
}