在 webview Android 中检测到 url 时如何更改活动

Posted

技术标签:

【中文标题】在 webview Android 中检测到 url 时如何更改活动【英文标题】:How to change activity when an url is detect in webview Android 【发布时间】:2016-01-30 18:54:53 【问题描述】:

当在我的 android 应用程序的 web 视图中检测到 URL 时,我尝试更改 Activity。我收到此错误:

Unable to start activity ComponentInfo"xxx": android.content.ActivityNotFoundException: No Activity found to handle Intent  act=Open.Tok.Act 

这是我的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="dk.westsoftdevelopment.elaegen" >

    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="17" />

    <!-- To auto-complete the email text field in the login form with the user's emails -->
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.READ_PROFILE" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

    <!-- Using the camera -->
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />


    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="a"
        android:theme="@style/AppTheme"
        >
        <activity android:name=".OpenTokActivity" android:configChanges="orientation|keyboardHidden|screenSize">
            <intent-filter>
                <action android:name="Open.Tok.Act" />

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

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

</manifest>

这是我的WebView 的代码:

aWebView.setWebViewClient(new WebViewClient()

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) 
        return super.shouldOverrideUrlLoading(view, url);
    

    @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);

        if(url.equals("http://95.85.53.176/nhi/booktid"))
        
            Log.d(LOGTAG, "GO TO OPENTOK!!!");
            startActivity(new Intent("OpenTokAct"));
        
        Log.d(LOGTAG,"current URL = " + url);

    



);

aWebView.loadUrl(mainUrl);

我在onCreate()的开头也试过这个,但它给了我同样的错误......

Intent openStartingPoint = new Intent("Open.Tok.Act");
startActivity(openStartingPoint);

谢谢

【问题讨论】:

【参考方案1】:

试试这个,

Intent intent = new Intent(MainActivity.this, Second.class);
startActivity(intent);

【讨论】:

如果这个回答对你有帮助,请采纳这个回答。 我不太了解您的解决方案。什么是Second.class?是我的 OpenTokActivity 吗? Second.class 是您从一个活动转到另一个活动的另一个活动名称。【参考方案2】:

在触发Intent 时,您有两个选择:将其设为explicit or implicit

现在,您正在做后者。为了使其正常工作,您的OpenTokActivity 的意图过滤器将需要相应更新:

<intent-filter>
    <action android:name="Open.Tok.Act" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" /> <!-- optional -->
</intent-filter>`

为什么?

Context.startActivity() 方法需要 DEFAULT 类别才能在未明确指定组件名称时解析您的活动。 BROWSABLE 类别应添加到可以从浏览器安全调用的活动中。

请注意,由于您是自己创建 Intent,因此您不需要“可浏览”类别。如果在稍后的某个阶段,您希望网站自动触发在您的应用中打开活动的重定向,那么您需要将其重新添加。以上是documented here。

但是,除非您将拥有多个可以处理自定义操作的 Activity,否则仅触发 显式 Intent 会容易得多:

startActivity(view.getContext(), OpenTokActivity.class);

然后您可以删除OpenTokActivity 的整个&lt;intent-filter&gt; ... &lt;/intent-filter&gt; 部分,除非您故意添加LAUNCHER 类别(这将在***启动器中添加活动的入口点)。

【讨论】:

【参考方案3】:

在 android 中启动 Activity 的不同方式。

第一种方式:- 显式

Intent intent = new Intent(this, MainActivity.class);
this.startActivity(intent);

第二种方式:- 隐式

startActivity(new Intent("dk.westsoftdevelopment.elaegen.OpenTokActivity"));

希望对你有所帮助。

【讨论】:

以上是关于在 webview Android 中检测到 url 时如何更改活动的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中检测来自WebView的通知?

检测 Android 和 iOS Webviews

寻找具有多个 WebViews 的 Android ViewFlipper 示例

如何在android中检测webview或浏览器

android webview 检测联网

如何检测您是不是在android java的webview中点击了youtube播放按钮?