html中其实是无法判断应用是否安装,除非在webview中通过js bridge,这里通过一种方式达到此目的。
1、编辑AndroidManifest.xml:
主要是增加第二个
Android:pathPrefix标识url的path,可以附带自己的数据通过string传递到activity,比如完整url为 myapp://xxx/openwith?data=mydata
**[html]** [view plain](http://blog.csdn.net/vinrex/article/details/38082759#) [copy](http://blog.csdn.net/vinrex/article/details/38082759#)
<div>
<embed id="ZeroClipboardMovie_1" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" type="application/x-shockwave-flash" width="18" height="18" align="middle" name="ZeroClipboardMovie_1" data-mce-fragment="1">
</embed>
</div>
</div>
- <span class="tag"><</span><span class="tag-name">activity</span>
- <span class="attribute">android:name</span>=<span class="attribute-value">“com.abc.MainActivity”</span>
- <span class="attribute">android:configChanges</span>=<span class="attribute-value">“orientation|keyboardHidden|navigation|screenSize”</span>
- <span class="attribute">android:screenOrientation</span>=<span class="attribute-value">“landscape”</span>
- <span class="attribute">android:theme</span>=<span class="attribute-value">“@android:style/Theme.NoTitleBar.Fullscreen”</span> <span class="tag">></span>
- <span class="tag"><</span><span class="tag-name">intent-filter</span><span class="tag">></span>
- <span class="tag"><</span><span class="tag-name">action</span> <span class="attribute">android:name</span>=<span class="attribute-value">“android.intent.action.MAIN”</span> <span class="tag">/></span>
- <span class="tag"><</span><span class="tag-name">category</span> <span class="attribute">android:name</span>=<span class="attribute-value">“android.intent.category.LAUNCHER”</span> <span class="tag">/></span>
- <span class="tag"></</span><span class="tag-name">intent-filter</span><span class="tag">></span>
- <span class="tag"><</span><span class="tag-name">intent-filter</span><span class="tag">></span>
- <span class="tag"><</span><span class="tag-name">action</span> <span class="attribute">android:name</span>=<span class="attribute-value">“android.intent.action.VIEW”</span> <span class="tag">/></span>
- <span class="tag"><</span><span class="tag-name">category</span> <span class="attribute">android:name</span>=<span class="attribute-value">“android.intent.category.BROWSABLE”</span> <span class="tag">/></span>
- <span class="tag"><</span><span class="tag-name">category</span> <span class="attribute">android:name</span>=<span class="attribute-value">“android.intent.category.DEFAULT”</span><span class="tag">/></span>
- <span class="tag"><</span><span class="tag-name">data</span> <span class="attribute">android:scheme</span>=<span class="attribute-value">“myapp”</span> <span class="attribute">android:pathPrefix</span>=<span class="attribute-value">“/xxx/openwith”</span> <span class="tag">/></span>
- <span class="tag"></</span><span class="tag-name">intent-filter</span><span class="tag">></span>
- t;/activity<span class="tag">></span>
然后通过activity获得data数据:
**[java]** [view plain](http://blog.csdn.net/vinrex/article/details/38082759#) [copy](http://blog.csdn.net/vinrex/article/details/38082759#)
<div>
<embed id="ZeroClipboardMovie_2" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" type="application/x-shockwave-flash" width="18" height="18" align="middle" name="ZeroClipboardMovie_2" data-mce-fragment="1">
</embed>
</div>
</div>
- <span class="keyword">public</span> <span class="keyword">void</span> onCreate(Bundle savedInstanceState) {
- Uri uridata = <span class="keyword">this</span>.getIntent().getData();
- String mydata = uridata.getQueryParameter(<span class="string">“data”</span>);
- …
- }
** **
** 2、编写html页面:**
整个页面也许是某个app的详细介绍,这里只写出关键的js代码:
**[javascript]** [view plain](http://blog.csdn.net/vinrex/article/details/38082759#) [copy](http://blog.csdn.net/vinrex/article/details/38082759#)
<div>
<embed id="ZeroClipboardMovie_3" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" type="application/x-shockwave-flash" width="18" height="18" align="middle" name="ZeroClipboardMovie_3" data-mce-fragment="1">
</embed>
</div>
</div>
- <span class="keyword">function</span> openApp() {
-
- <span class="keyword">if</span> (/android/i.test(navigator.userAgent)) {
- <span class="keyword">var</span> isrefresh = getUrlParam(<span class="string">‘refresh’</span>); <span class="comment">// 获得refresh参数</span>
- <span class="keyword">if</span>(isrefresh == 1) {
- <span class="keyword">return</span>
- }
- window.location.href = <span class="string">‘myapp://xxx/openwith?data=mydata’</span>;
- window.setTimeout(<span class="keyword">function</span> () {
- window.location.href += <span class="string">‘&refresh=1’</span> <span class="comment">// 附加一个特殊参数,用来标识这次刷新不要再调用myapp:// 了</span>
- }, 500);
- }
-
- }
上面代码可以达到这样一个目的,先请求 myapp:// ,如果系统能处理,或者说已经安装了myapp表示的应用,那么就可以打开,另外,如果不能打开,直接刷新一下当前页面,等于是重置location。
💬 评论