请问大神们,用webview打开淘宝详情页时,手机会自动打开手机上安装的手机淘宝,能阻止打开吗?

sulinly 2018-01-22 01:51:04
用webview打开淘宝详情页时,手机会自动打开手机上安装的手机淘宝软件,能阻止自动打手机上安装的淘宝软件吗?网上搜了一大圈,发现没有相关资料,我都晕了。。。
package com.sugem.myapplication;

import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=findViewById(R.id.button);
final WebView webView=findViewById(R.id.wv);
webView.getSettings().setJavaScriptEnabled(true); //设置允许Js
webView.setBackgroundColor(Color.TRANSPARENT);//设置webview控件背景透明
//webView.getSettings().setSupportZoom(true);// 设置可以支持缩放
//webView.getSettings().setBuiltInZoomControls(true);// 设置出现缩放工具
webView.getSettings().setUseWideViewPort(true);//扩大比例的缩放
webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);//自适应屏幕
webView.getSettings().setLoadWithOverviewMode(true);// 缩放至屏幕的大小
// webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
webView.setInitialScale(1);//缩放等级25%最小
webView.setWebChromeClient(new WebChromeClient());

webView.loadUrl("https://item.taobao.com/item.htm?id=563621033487");

webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}

@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
});

}
}


manifests:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.sugem.myapplication">
<uses-permission android:name="android.permission.INTERNET"/>

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

</application>

</manifest>


build.gradle:

apply plugin: 'com.android.application'

android {
compileSdkVersion 26
defaultConfig {
applicationId "com.sugem.myapplication"
minSdkVersion 15
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}


布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.sugem.myapplication.MainActivity">

<!--<Button-->
<!--android:id="@+id/button"-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:text="Button"-->
<!--tools:layout_editor_absoluteX="16dp"-->
<!--tools:layout_editor_absoluteY="16dp" />-->

<WebView
android:id="@+id/wv"
android:layout_width="368dp"
android:layout_height="431dp"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>
...全文
1841 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
键盘舞者113 2018-02-03
  • 打赏
  • 举报
回复
通过拦截url就可以了,他这个之所以会跳转手机淘宝,因为一加载这个网页他自己就发一个跳转淘吧app的url的事件,那我们拦截他就好了,下面是我写的代码,亲测有效,我已经在问答你回复了,如果有用请在问答里采纳 public class ThreeActivity extends AppCompatActivity { private WebView myWebView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_three); myWebView = (WebView) findViewById(R.id.webview); // Configure related browser settings myWebView.getSettings().setLoadsImagesAutomatically(true); //如果访问的页面中有 Javascript,则 WebView 必须设置支持 Javascript myWebView.getSettings().setJavaScriptEnabled(true); myWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); // Configure the client to use when opening URLs myWebView.setWebViewClient(new MyBrowser()); // Load the initial URL myWebView.loadUrl("http://h5.m.taobao.com/awp/core/detail.htm?id=563621033487"); } // 如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖 WebView的WebViewClient对象. private class MyBrowser extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { //view.loadUrl(url); return false; } } /*如果不做任何处理 ,浏览网页,点击系统“Back”键,整个 Browser 会调用 finish()而结束自身, 如果希望浏览的网页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该 Back 事件.(代码有些精简)*/ public boolean onKeyDown(int keyCode, KeyEvent event) { if ( myWebView.canGoBack()) { myWebView.goBack(); return true; } return super.onKeyDown(keyCode, event); } }
sulinly 2018-01-31
  • 打赏
  • 举报
回复
引用 12 楼 jklwan 的回复:
[quote=引用 10 楼 sulinly 的回复:] vivo xplay6 版本7.1.1。以前也是不会自动打开的,前段时间突然就自动打开了,不知道是怎么回事。现在必须把淘宝在任务管理器里彻底干掉才不会自动打开。晕死了,谢谢大神!
那就没办法了,应该是淘宝自己打开的,没研究过。[/quote] 谢谢大神,发现其他浏览器打开淘宝网站也会打开淘宝app。
sulinly 2018-01-30
  • 打赏
  • 举报
回复
引用 12 楼 jklwan的回复:
[quote=引用 10 楼 sulinly 的回复:] vivo xplay6 版本7.1.1。以前也是不会自动打开的,前段时间突然就自动打开了,不知道是怎么回事。现在必须把淘宝在任务管理器里彻底干掉才不会自动打开。晕死了,谢谢大神!
那就没办法了,应该是淘宝自己打开的,没研究过。[/quote] 明白了,谢谢。我再研究下。
jklwan 2018-01-29
  • 打赏
  • 举报
回复
引用 10 楼 sulinly 的回复:
vivo xplay6 版本7.1.1。以前也是不会自动打开的,前段时间突然就自动打开了,不知道是怎么回事。现在必须把淘宝在任务管理器里彻底干掉才不会自动打开。晕死了,谢谢大神!
那就没办法了,应该是淘宝自己打开的,没研究过。
sulinly 2018-01-29
  • 打赏
  • 举报
回复
大神们,咋办啊,拜托帮帮我。
sulinly 2018-01-23
  • 打赏
  • 举报
回复
引用 3 楼 jklwan 的回复:
[quote=引用 2 楼 sulinly 的回复:] 我重写了,还是不行呢?
先写setWebViewClient,再加载url 如果你是7.0以上的手机加上这个代码

@TargetApi(Build.VERSION_CODES.N)
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            return shouldOverrideUrlLoading(view, request.getUrl().toString());
        }
[/quote] 是7.0以上的手机。
sulinly 2018-01-23
  • 打赏
  • 举报
回复
引用 3 楼 jklwan 的回复:
[quote=引用 2 楼 sulinly 的回复:] 我重写了,还是不行呢?
先写setWebViewClient,再加载url 如果你是7.0以上的手机加上这个代码

@TargetApi(Build.VERSION_CODES.N)
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            return shouldOverrideUrlLoading(view, request.getUrl().toString());
        }
[/quote] 测试了还是要弹出淘宝软件呢?万分感谢,再帮忙看看。
package com.sugem.myapplication;

import android.annotation.TargetApi;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Build;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.webkit.JsResult;
import android.webkit.URLUtil;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final WebView webView = findViewById(R.id.wv);
        webView.getSettings().setJavaScriptEnabled(true); //设置允许Js
        webView.setBackgroundColor(Color.TRANSPARENT);//设置webview控件背景透明
        //webView.getSettings().setSupportZoom(true);// 设置可以支持缩放
        //webView.getSettings().setBuiltInZoomControls(true);// 设置出现缩放工具
        webView.getSettings().setUseWideViewPort(true);//扩大比例的缩放
        webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);//自适应屏幕
        webView.getSettings().setLoadWithOverviewMode(true);// 缩放至屏幕的大小
        webView.setWebChromeClient(new WebChromeClient());

        webView.setWebViewClient(new WebViewClient() {
            @TargetApi(Build.VERSION_CODES.N)
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                return shouldOverrideUrlLoading(view, request.getUrl().toString());
            }
//            public boolean shouldOverrideUrlLoading(WebView view, String url) {
//                if (!URLUtil.isNetworkUrl(url)) {
//                    // 不是url地址,什么都不做
//                    // 或者打开app,打开app代码
//                    //startActivity(Intent.parseUri(url, Intent.URI_INTENT_SCHEME));
//                    return true;
//                }
//                return false;
//            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
            }
        });
        webView.loadUrl("https://item.taobao.com/item.htm?id=563621033487");
    }
}
jklwan 2018-01-23
  • 打赏
  • 举报
回复
引用 2 楼 sulinly 的回复:
我重写了,还是不行呢?
先写setWebViewClient,再加载url 如果你是7.0以上的手机加上这个代码

@TargetApi(Build.VERSION_CODES.N)
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            return shouldOverrideUrlLoading(view, request.getUrl().toString());
        }
sulinly 2018-01-23
  • 打赏
  • 举报
回复
引用 8 楼 jklwan的回复:
[quote=引用 7 楼 sulinly 的回复:] 加上也试过的,还是会自动打开,是不是我的代码哪个地方不对啊?万分感谢!
试过了啊不会打开的啊,你是什么手机,什么版本的[/quote] vivo xplay6 版本7.1.1。以前也是不会自动打开的,前段时间突然就自动打开了,不知道是怎么回事。现在必须把淘宝在任务管理器里彻底干掉才不会自动打开。晕死了,谢谢大神!
sulinly 2018-01-23
  • 打赏
  • 举报
回复
引用 8 楼 jklwan的回复:
[quote=引用 7 楼 sulinly 的回复:] 加上也试过的,还是会自动打开,是不是我的代码哪个地方不对啊?万分感谢!
试过了啊不会打开的啊,你是什么手机,什么版本的[/quote] vivo xplay6 版本7.1.1。以前也是不会自动打开的,前段时间突然就自动打开了,不知道是怎么回事。现在必须把淘宝在任务管理器里彻底干掉才不会自动打开。晕死了,谢谢大神!
jklwan 2018-01-23
  • 打赏
  • 举报
回复
引用 7 楼 sulinly 的回复:
加上也试过的,还是会自动打开,是不是我的代码哪个地方不对啊?万分感谢!
试过了啊不会打开的啊,你是什么手机,什么版本的
sulinly 2018-01-23
  • 打赏
  • 举报
回复
引用 6 楼 jklwan 的回复:
[quote=引用 5 楼 sulinly 的回复:] 是7.0以上的手机。
我说的是加上,原来的不要删啊

            @TargetApi(Build.VERSION_CODES.N)
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                return shouldOverrideUrlLoading(view, request.getUrl().toString());
            }
           @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
               if (!URLUtil.isNetworkUrl(url)) {
//                    // 不是url地址,什么都不做
//                    // 或者打开app,打开app代码
//                    //startActivity(Intent.parseUri(url, Intent.URI_INTENT_SCHEME));
                   return true;
                }
               return false;
           }
 
[/quote] 加上也试过的,还是会自动打开,是不是我的代码哪个地方不对啊?万分感谢!
package com.sugem.myapplication;

import android.annotation.TargetApi;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Build;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.webkit.JsResult;
import android.webkit.URLUtil;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final WebView webView = findViewById(R.id.wv);
        webView.getSettings().setJavaScriptEnabled(true); //设置允许Js
        webView.setBackgroundColor(Color.TRANSPARENT);//设置webview控件背景透明
        //webView.getSettings().setSupportZoom(true);// 设置可以支持缩放
        //webView.getSettings().setBuiltInZoomControls(true);// 设置出现缩放工具
        webView.getSettings().setUseWideViewPort(true);//扩大比例的缩放
        webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);//自适应屏幕
        webView.getSettings().setLoadWithOverviewMode(true);// 缩放至屏幕的大小
        webView.setWebChromeClient(new WebChromeClient());

        webView.setWebViewClient(new WebViewClient() {
            @TargetApi(Build.VERSION_CODES.N)
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                return shouldOverrideUrlLoading(view, request.getUrl().toString());
            }
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (!URLUtil.isNetworkUrl(url)) {
                    // 不是url地址,什么都不做
                    // 或者打开app,打开app代码
                    //startActivity(Intent.parseUri(url, Intent.URI_INTENT_SCHEME));
                    return true;
                }
                return false;
            }
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
            }
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
            }
        });
        webView.loadUrl("https://item.taobao.com/item.htm?id=563621033487");
    }
}
jklwan 2018-01-23
  • 打赏
  • 举报
回复
引用 5 楼 sulinly 的回复:
是7.0以上的手机。
我说的是加上,原来的不要删啊

            @TargetApi(Build.VERSION_CODES.N)
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                return shouldOverrideUrlLoading(view, request.getUrl().toString());
            }
           @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
               if (!URLUtil.isNetworkUrl(url)) {
//                    // 不是url地址,什么都不做
//                    // 或者打开app,打开app代码
//                    //startActivity(Intent.parseUri(url, Intent.URI_INTENT_SCHEME));
                   return true;
                }
               return false;
           }
 
sulinly 2018-01-22
  • 打赏
  • 举报
回复
引用 1 楼 jklwan 的回复:
WebViewClient中重写shouldOverrideUrlLoading方法

public boolean shouldOverrideUrlLoading(WebView view, String url) {
   if(!URLUtil.isNetworkUrl(url)){
       // 不是url地址,什么都不做
      // 或者打开app,打开app代码
       //startActivity(Intent.parseUri(url, Intent.URI_INTENT_SCHEME));
       return true;
   }
   return false;
}
我重写了,还是不行呢?

package com.sugem.myapplication;

import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.JsResult;
import android.webkit.URLUtil;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button=findViewById(R.id.button);
        final WebView webView=findViewById(R.id.wv);
        webView.getSettings().setJavaScriptEnabled(true); //设置允许Js
        webView.setBackgroundColor(Color.TRANSPARENT);//设置webview控件背景透明
        //webView.getSettings().setSupportZoom(true);// 设置可以支持缩放
        //webView.getSettings().setBuiltInZoomControls(true);// 设置出现缩放工具
        webView.getSettings().setUseWideViewPort(true);//扩大比例的缩放
        webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);//自适应屏幕
        webView.getSettings().setLoadWithOverviewMode(true);// 缩放至屏幕的大小
//        webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
//        webView.setInitialScale(1);//缩放等级25%最小
        webView.setWebChromeClient(new WebChromeClient());

        webView.loadUrl("https://item.taobao.com/item.htm?id=563621033487");
        webView.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if(!URLUtil.isNetworkUrl(url)){
                    // 不是url地址,什么都不做
                    // 或者打开app,打开app代码
                    //startActivity(Intent.parseUri(url, Intent.URI_INTENT_SCHEME));
                    return true;
                }
                return false;
            }
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
            }
        });
    }
}
jklwan 2018-01-22
  • 打赏
  • 举报
回复
WebViewClient中重写shouldOverrideUrlLoading方法

public boolean shouldOverrideUrlLoading(WebView view, String url) {
   if(!URLUtil.isNetworkUrl(url)){
       // 不是url地址,什么都不做
      // 或者打开app,打开app代码
       //startActivity(Intent.parseUri(url, Intent.URI_INTENT_SCHEME));
       return true;
   }
   return false;
}

80,348

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧