【问题标题】:How to change activity when an url is detect in webview Android在 webview Android 中检测到 url 时如何更改活动
【发布时间】: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);

谢谢

【问题讨论】:

    标签: java android android-activity webview


    【解决方案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"));
      

      希望对你有所帮助。

      【讨论】:

        猜你喜欢
        • 2012-03-07
        • 1970-01-01
        • 2020-07-10
        • 2015-12-05
        • 1970-01-01
        • 1970-01-01
        • 2013-12-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多