繁体   English   中英

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

[英]intent.putExtra() Error on OS 4.0 - how to fix that?

我试图通过包含putExtra的按钮启动活动,但是该应用程序停止在该按钮上工作,我试图在清单中禁用android:hardwareAccelerated =“ false” ,但这在android 4.0上不起作用,有人帮我?

但是显示错误

E/dalvikvm: VM aborting A/libc: Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1), thread 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_site:

<?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中 ,都可能会导致在我的测试中出现错误。 稍后,您决定要使用与之相关的先前代码来做什么。 这样,您的项目就可以在apis> = 14上运行。祝您好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM