是否可以建立这样的链接:
<a href="anton://useful_info_for_anton_app">click me!</a>
让我的安东应用启动吗
我知道这适用于Android Market应用程序的市场协议,但类似的事情是否也适用于其他应用程序?
下面是一个将启动Android Market的链接示例:
<a href="market://search?q=pname:com.nytimes.android">click me!</a>
更新:
我接受eldarerathis提供的答案很好,但我只想提一下,我在<intent-filter>标记的子元素的顺序方面遇到了一些问题。我建议您简单地使用该标记中的新子元素制作另一个<intent-filter>,以避免我遇到的问题。例如,我的AndroidManifest.xml看起来是这样的:
<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>
只想通过浏览器打开应用程序?你可以使用下面的代码来实现:
HTML:
<a href="intent:#Intent;action=packageName;category=android.intent.category.DEFAULT;category=android.intent.category.BROWSABLE;end">Click here</a>
清单:
<intent-filter>
<action android:name="packageName" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
这个意图过滤器应该在Launcher Activity中。
如果你想在点击浏览器链接时传递数据,只需引用这个链接。
这个方法不会调用消歧对话框,要求你打开应用程序或浏览器。
如果您在舱单中登记以下内容
<manifest package="com.myApp" .. >
<application ...>
<activity ...>
<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="gallery"
android:scheme="myApp" />
</intent-filter>
</activity>
..
例如,在手机上点击电子邮件中的这个url
<a href="intent://gallery?directLink=true#Intent;scheme=myApp;package=com.myApp;end">
Click me
</a>
然后android会尝试找到一个带有com包的应用程序。myApp响应你的画廊意图,并有一个myApp方案。万一它不能,它会带你去商店,寻找com。myApp,应该是你的app。
请不要像那样使用你自己的自定义方案!!URI方案是一个网络全局命名空间。你在全球拥有“anton:”计划吗?没有?那就不要用它。
一种选择是拥有一个网站,并为该网站上的特定URI设置一个意图过滤器。例如,这是Market在其网站上拦截uri的方法:
<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:scheme="http" android:host="market.android.com"
android:path="/search" />
</intent-filter>
或者,还有“意图:”方案。这允许你将几乎任何Intent描述为URI,浏览器将在单击时尝试启动该URI。要构建这样一个方案,最好的方法是只编写代码来构造你想要启动的Intent,然后打印Intent. touri (Intent. uri_intent_scheme)的结果。
您可以使用具有此意图的操作来查找支持该操作的任何活动。出于安全考虑,浏览器会在启动intent之前自动添加BROWSABLE类别;它还将删除您出于相同原因提供的任何显式组件。
如果你想确保它只启动你的应用程序,最好的方法是使用你自己的作用域动作,并使用Intent. setpackage()表示Intent只匹配你的应用程序包。
两者之间的权衡:
http URIs require you have a domain you own. The user will always get the option to show the URI in the browser. It has very nice fall-back properties where if your app is not installed, they will simply land on your web site.
intent URIs require that your app already be installed and only on Android phones. The allow nearly any intent (but always have the BROWSABLE category included and not supporting explicit components). They allow you to direct the launch to only your app without the user having the option of instead going to the browser or any other app.
试试我的简单技巧:
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>
或者你可以为类文件名设置< a href="classRegister:true" > <- "true"值
不过,这个脚本适用于mailto link:)
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);
}