在 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
的整个<intent-filter> ... </intent-filter>
部分,除非您故意添加LAUNCHER
类别(这将在***启动器中添加活动的入口点)。
【讨论】:
【参考方案3】:在 android 中启动 Activity 的不同方式。
第一种方式:- 显式
Intent intent = new Intent(this, MainActivity.class);
this.startActivity(intent);
第二种方式:- 隐式
startActivity(new Intent("dk.westsoftdevelopment.elaegen.OpenTokActivity"));
希望对你有所帮助。
【讨论】:
以上是关于在 webview Android 中检测到 url 时如何更改活动的主要内容,如果未能解决你的问题,请参考以下文章