处理Android浏览器/ webview中的链接以直接启动应用程序

时间:2011-09-27 13:48:25

标签: java android

我想通过链接打开我的应用程序, 遵循Make a link in the Android browser start up my app?的指示。 好吧,它工作正常(大部分时间......这就是我寻求帮助的原因)。

我的HTML链接

<a href="intent:#Intent;action=com.mark.MY_ACTION;end">Open Application</a>

我的意图过滤器的格式为

<intent-filter>
     <action android:name="com.mark.MY_ACTION"/>
     <category android:name="android.intent.category.DEFAULT">
     <category android:name="android.intent.category.BROWSABLE">
</intent-filter>

到目前为止一切顺利(我希望)。它可以从m-o-s-t浏览器中正常工作。

为了测试上面的内容,我写了一个演示活动

final WebView webview = new WebView(this); 
setContentView(webview); 
webview.loadUrl("http://www.myhomepage.com/"); 

页面http://www.myhomepage.com/有一些自定义链接/ href(包括 无礼的)。

按常规链接会打开带有这些链接的浏览器,但按下我的“特殊链接” link“(intnet one)打开404页面

  

网页不可用   意图:#Intent;动作= com.mark.MY_ACTION;端
  可能会暂时失望....

虽然Diane在The above link中提及,

  

它们允许您将启动定向到您的应用,而无需用户选择转到浏览器或任何其他应用。

3 个答案:

答案 0 :(得分:1)

您的意图过滤器与Diana提到的相同

<activity android:name=".AntonWorld"
      android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter>
        <data android:scheme="anton" />
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.BROWSABLE" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

所以你应该这样:

<intent-filter> 
    <data android:scheme="com.mark.MY_ACTION"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>

没有测试是否需要android.intent.category.VIEW。如果有效,请告诉我。

答案 1 :(得分:1)

尝试我的简单技巧:

        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if(url.startsWith("classRegister:")) {                  
                Intent MnRegister = new Intent(getApplicationContext(), register.class); startActivity(MnRegister);
            }               
            view.loadUrl(url);
            return true;
        }

和我的HTML链接:

<a href="classRegister:true">Go to register.java</a>

或者你可以制作&lt; a href =“classRegister: true ”&gt; &lt; - 类名

的“true”值

但是这个脚本适用于mailto链接:)

        if (url.startsWith("mailto:")) {
            String[] blah_email = url.split(":");
            Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
            emailIntent.setType("text/plain");
            emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{blah_email[1]});
            emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, what_ever_you_want_the_subject_to_be)");
            Log.v("NOTICE", "Sending Email to: " + blah_email[1] + " with subject: " + what_ever_you_want_the_subject_to_be);
            startActivity(emailIntent);
        }

答案 2 :(得分:1)

Manifest.xml

中添加此代码
<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data
        android:host="www.parag-chauhan.com"
        android:path="/test"
        android:scheme="http" />
</intent-filter>

为测试创建另一个项目并在代码

下运行
Intent i = new Intent(
    Intent.ACTION_VIEW , Uri.parse("http://www.parag-chauhan.com/test")
);
startActivity(i);

您也可以在链接中传递参数。有关详细信息,请参阅我的博文Make a link in the Android browser start up my app?