Android Local app opens in webview - android

I'm developing an app that should display a web page and from a link in that page open another app, let's call it otherApp. I display the web page in my app with WebView;
WebView myWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
myWebView.setWebViewClient(new WebViewClient() {
#Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getHost().indexOf("example")>0) {
// This is my web site, so do not override;
//let my WebView load the page
return false;
}
// Otherwise, the link is not for a page on my site, so launch
// another Activity that handles URLs
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
});
myWebView.loadUrl("https://www.example.com/demo.html");
The demo.html file contains the link:
Start otherApp
Using the tablet's browser, clicking the link opens otherApp as expected with Chrome still running. However when using my app, otherApp opens in WebView and I need both apps to be running independently of each other. The code was taken from developer.android.com, I'm using a Nexus 7 tablet running Marshmallow.
Any ideas what I am missing?

Related

The mystery of the disappearing URL

So I've been trying to get one of my activity to display a published google sheet webpage... and I managed to get it working on my emulator (nexus 5, API 22) but when I run the app on my phone (Samsung galaxy S7) it printed out a toast message "failed to find document. it is possible the document has been deleted"
I've tried testing with and it works in both the emulator and the phone so I think the code serves it's purpose. I really don't understand...
here is a copy of my code:
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_schedule);
WebView webView = new WebView(this);
webView.loadUrl("https://docs.google.com/spreadsheets/d/e/2PACX-1vSnBA-tNsQsUKOUCs8PkdADgMP2n4TFyl8JtKFkxUanIoXbcC9xuzY89Xw9oIRCL0ane3MKpZYRFrP1/pubhtml?gid=0&single=true");
WebSettings settings = webView.getSettings();
settings.setSupportZoom(true);
settings.setBuiltInZoomControls(true);
}
I assume Google is redirecting your url to another url. So can you try the below code for handling redirect urls in WebView.
mWebView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return false;
}
});

How to stop ads to open in my Webview of Android App?

I am developing a mobile app. On some options I am redirecting the user to different websites like http://m.moneycontrol.com/ , http://www.redbus.com/ etc.
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView mainWebView = (WebView) findViewById(R.id.mainWebView);
mainWebView.setWebViewClient(new MyCustomWebViewClient());
mainWebView.loadUrl("http://www.m.moneycontrol.com/");
// mainWebView.setScrollBarStyle(MainActivity.this.SCROLLBARS_INSIDE_OVERLAY);
WebSettings webSettings = mainWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
mainWebView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading (WebView view, String url){
//True if the host application wants to leave the current WebView and handle the url itself, otherwise return false.
return true;
}
});
}
private class MyCustomWebViewClient extends WebViewClient {
#Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
When I tested the app on some phones. On 2-3 phones the webview started redirecting to different sites and started opening affiliate ads to install antivirus etc.
Please Suggest me solution to stop these ads.
Change the useragent string of the WebView to that of IE or desktop Firefox. The websites will show the regular version of the site and hopefully the ads won't be there.
webview.getSettings().setUserAgentString(
"Mozilla/5.0 (Windows NT 6.1; rv:13.0) Gecko/20100101 Firefox/12");
The general recommendation is not to open in your app's WebView any sites that you don't control. Instead of doing that, just launch the system browser:
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.m.moneycontrol.com/")));

why my webview is opend in a own browser

I have a android code like this:
WebView myWebView = (WebView) findViewById(R.id.webView1);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
myWebView.loadUrl("http://test.com");
the problem is, when I start the app, it is opend in a new browser intend and not in my webView of the app.
how to avoid this?
Add a WebViewClient. This will prevent the default browser to open the URL (or get a selection dialog when there is no default)
myWebView.setWebViewClient(new WebViewClient());
More information can be found on Android website: http://developer.android.com/guide/webapps/webview.html
With the WebViewClient you can do more things, like preventing to load an URL, or change the URL.
private class MyWebViewClient extends WebViewClient {
#Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getHost().equals("www.example.com")) {
// This is my web site, so do not override; let my WebView load the page
return false;
}
// Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
}

How to avoid webview links opening in the same webview

When a user clicks on a link in the webview. I want to show a dialog asking whether the user wants to view it in default browser, if he opts YES then he should be taken to default browser otherwise it shouldn't load the link at all.
But, the issue I am facing is, I could able to show the dialog inside run() of WebViewClient's overridden method shouldOverrideUrlLoading(). When the user opts YES I am doing startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse(url))); to show it in default browser. But, irrespective of the user selects for YES/NO it is showing the link in webview which I want to avoid. Any suggestions appreciated...TIA
WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new WebViewClient());
private class MyWebViewClient extends WebViewClient {
#Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getHost().equals("www.example.com")) {
// This is my web site, so do not override; let my WebView load the page
return false;
}
// Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
}
http://developer.android.com/guide/webapps/webview.html
I resolved the issue, by just reloading the same URL inside shouldOverrideUrlLoading() method. Thanks for your suggestions

Force Android WebView to open in new browser

Android has changed its default method for opening clicks, it now opens them in the webview instead of a new browser. This has already been asked here but every thing I have tried opens the links in the WebView. Can someone give me details on capturing the clicks so I con force the link to open in the default browser.
use this in your button onclick:
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(browserIntent);
For it to parse it needs a http:// at the start.
Finally working don't know if it is the best way but it works. I placed the following code inside the onCreate. The string strSiteUrl set to the page I want the WebView to show.
/* Load WebView in memory */
WebView webv = (WebView) findViewById(R.id.webv);
webv.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Intent browserIntent = new Intent();
browserIntent.setAction(Intent.ACTION_VIEW);
browserIntent.addCategory(Intent.CATEGORY_BROWSABLE);
browserIntent.setData(Uri.parse(url));
startActivity(browserIntent);
return false;
}
}); //End webv.setVewView
/* Configure WebView */
WebSettings webSettings = webv.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setSupportMultipleWindows(true);
webv.loadUrl(strSiteUrl);
When a user clicked on a link in the WebView page it would open the default browser and show the linked page. However, after clicking the back button depending on which link was clicked the WebView would return to the original page or show the linked page. This is not what I wanted, I only wanted the WebView to show the original page. I don't know why some links didn't return correctly, maybe those links were redirects? So to get around this problem I used the onStart call. I made the view webv global by placing
WebView webv;
in my global declarations. Changed the webv assignment to
webv = (WebView) findViewById(R.id.webv);
Then created the following onStart
#Override
public void onStart() {
super.onStart();
String strReturnUrl = String.valueOf(webv.getUrl());
Log.i("URL!", strReturnUrl);
if (!strReturnUrl.contentEquals(strSiteUrl)) {
webv.loadUrl(strSiteUrl);
}
}
Writing to the log the returned url proved that when the back button was pressed it returned with different urls depending on which link was clicked. I used the if statement to prevent unnecessary reloading of the original url.

Categories

Resources