java - OS 4.0 上的 intent.putExtra() 错误 - 如何解决?

标签 java android webview

我试图通过一个包含 putExtra 的按钮启动一个 Activity 。但是应用程序停止在按钮上工作,我试图在 list 中禁用 android:hardwareAccelerated = "false",但是这在 android 4.0 上不起作用,有人可以帮助我吗?

但是显示错误

E/dalvikvm:虚拟机中止 A/libc:0xdeadd00d(代码=1)处的致命信号 11 (SIGSEGV),线程 14318

MainActivity中的代码:

  public void Button (View view){
    Intent intent = new Intent(MainActivity.this, Site.class);
    intent.putExtra("url", "https://example.com/");
    startActivity(intent); }

Site.java

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.FrameLayout;


public class Site extends Activity {
    private static final String TAG = Site.class.getSimpleName();


    protected WebView mainWebView;
    private Context mContext;
    private WebView mWebviewPop;
    private FrameLayout mContainer;


    private String url = "http://example.com";// 


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_blog);

        mContainer = (FrameLayout) findViewById(R.id.container);
        mContext = this.getApplicationContext();

        clearCookies(this);

        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.setAcceptCookie(true);


        mainWebView = getWebView(mContext);


        mainWebView.setWebChromeClient(new MyCustomChromeClient());

        mainWebView.loadUrl(url);

        mContainer.addView(mainWebView);


    }



    WebView getWebView(Context context) {
        WebView wv = new WebView(context);
        wv.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT));

        wv.clearCache(true);


        WebSettings webSettings = wv.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setAppCacheEnabled(true);
        webSettings.setDomStorageEnabled(true);
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
        webSettings.setSupportMultipleWindows(true);

        if (Build.VERSION.SDK_INT >= 21) {
            webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
            CookieManager.getInstance().setAcceptThirdPartyCookies(wv, true);
        }


        return wv;
    }


    private class MyCustomChromeClient extends WebChromeClient {

        @Override
        public boolean onCreateWindow(WebView view, boolean isDialog,
                                      boolean isUserGesture, Message resultMsg) {
            mWebviewPop = getWebView(mContext);
            mWebviewPop.setWebViewClient(new WebViewClient() {
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    String host = Uri.parse(url).getHost();
                    Log.d(TAG, "host=" + host);
                    if (host.contains("facebook.com")) {
                        view.loadUrl(url);
                        return true;
                    }

                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                    startActivity(intent);
                    return false;
                }
            });
            mWebviewPop.setWebChromeClient(new MyCustomChromeClient());

            mContainer.addView(mWebviewPop);

            WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
            transport.setWebView(mWebviewPop);
            resultMsg.sendToTarget();

            return true;
        }

        @Override
        public void onCloseWindow(WebView window) {

            Log.d("onCloseWindow", "called");

            mWebviewPop.setVisibility(View.GONE);
            mContainer.removeView(mWebviewPop);
            mWebviewPop = null;

        }
    }

    @SuppressWarnings("deprecation")
    public static void clearCookies(Context context) {

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
            Log.d(TAG, "Using clearCookies code for API >=" + String.valueOf(Build.VERSION_CODES.LOLLIPOP_MR1));
            CookieManager.getInstance().removeAllCookies(null);
            CookieManager.getInstance().flush();
        } else {
            Log.d(TAG, "Using clearCookies code for API <" + String.valueOf(Build.VERSION_CODES.LOLLIPOP_MR1));
            CookieSyncManager cookieSyncMngr = CookieSyncManager.createInstance(context);
            cookieSyncMngr.startSync();
            CookieManager cookieManager = CookieManager.getInstance();
            cookieManager.removeAllCookie();
            cookieManager.removeSessionCookie();
            cookieSyncMngr.stopSync();
            cookieSyncMngr.sync();
        }
    }
}

Activity 网站:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    android:id="@+id/container"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</FrameLayout>

最佳答案

在您的代码 (Site.java) 中,更改

activity_blog.xml

activity_site.xml

这是您的布局文件的名称。然后注释掉下面一行:

mainWebView.setWebChromeClient(new MyCustomChromeClient());

在您的 Site.java 中,因为这在我的测试中引发了错误。稍后您决定要用以前的代码做什么。有了这个,您的项目就可以在 >= 14 的 API 上运行。祝您好运。

关于java - OS 4.0 上的 intent.putExtra() 错误 - 如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48777502/

相关文章:

java - 用JAVA扫描一系列文件夹

java - 如何将自己的文件发送给聊天 friend ?

android - 让 GridView 项目完全正方形

javascript - 在Android应用程序中加载网页以执行javascript

java - CDI-拦截器 : Get param from intercepted Method

java - 如何使用Java为MySQL创建新用户?

当用户尝试扫描 NFC 标签时,Android 10 显示 NFC 读取错误 toast

android - 通过 Android 应用程序即时获取 GPS 位置

ios - 使用 UIWebView 滚动 UIImageView?

android - 没有长触摸,WebView 不会在某些设备上滚动