是否可以建立这样的链接:
<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>
这个方法不会调用消歧对话框,要求你打开应用程序或浏览器。
如果您在舱单中登记以下内容
<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.
一旦你为你的应用设置了意图和自定义url方案,接收页面顶部的javascript代码对我来说在iOS和Android上都有效:
<script type="text/javascript">
// if iPod / iPhone, display install app prompt
if (navigator.userAgent.match(/(iPhone|iPod|iPad);?/i) ||
navigator.userAgent.match(/android/i)) {
var store_loc = "itms://itunes.com/apps/raditaz";
var href = "/iphone/";
var is_android = false;
if (navigator.userAgent.match(/android/i)) {
store_loc = "https://play.google.com/store/apps/details?id=com.raditaz";
href = "/android/";
is_android = true;
}
if (location.hash) {
var app_loc = "raditaz://" + location.hash.substring(2);
if (is_android) {
var w = null;
try {
w = window.open(app_loc, '_blank');
} catch (e) {
// no exception
}
if (w) { window.close(); }
else { window.location = store_loc; }
} else {
var loadDateTime = new Date();
window.setTimeout(function() {
var timeOutDateTime = new Date();
if (timeOutDateTime - loadDateTime < 5000) {
window.location = store_loc;
} else { window.close(); }
},
25);
window.location = app_loc;
}
} else {
location.href = href;
}
}
</script>
这个功能只在Android浏览器上测试过。Firefox和Opera我不太确定。关键是即使Android浏览器不会在window上为你抛出一个很好的异常。打开(custom_url, '_blank'),它将失败并返回null,您可以稍后进行测试。
更新:使用store_loc = "https://play.google.com/store/apps/details?id=com.raditaz";链接到Android上的谷歌Play。
只想通过浏览器打开应用程序?你可以使用下面的代码来实现:
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中。
如果你想在点击浏览器链接时传递数据,只需引用这个链接。