0

在html页面中判断本地app是否安装并打开

html中其实是无法判断应用是否安装,除非在webview中通过js bridge,这里通过一种方式达到此目的。

1、编辑AndroidManifest.xml:

主要是增加第二个<intent-filter>,myapp用来标识schema,最好能保证手机系统唯一,那样就可以打开应用,而不是弹出一个选择框。

Android:pathPrefix标识url的path,可以附带自己的数据通过string传递到activity,比如完整url为 myapp://xxx/openwith?data=mydata

  1. <activity
  2.   android:name=“com.abc.MainActivity”
  3.   android:configChanges=“orientation|keyboardHidden|navigation|screenSize”
  4.   android:screenOrientation=“landscape”
  5.   android:theme=“@android:style/Theme.NoTitleBar.Fullscreen” >
  6.   <intent-filter>
  7.       <action android:name=“android.intent.action.MAIN” />
  8.       <category android:name=“android.intent.category.LAUNCHER” />
  9.   </intent-filter>
  10.   <intent-filter>
  11.       <action android:name=“android.intent.action.VIEW” />
  12.       <category android:name=“android.intent.category.BROWSABLE” />
  13.       <category android:name=“android.intent.category.DEFAULT”/>
  14.       <data android:scheme=“myapp” android:pathPrefix=“/xxx/openwith” />
  15.   </intent-filter>
  16. t;/activity>

然后通过activity获得data数据:

  1.  public void onCreate(Bundle savedInstanceState) {
  2.      Uri uridata = this.getIntent().getData();
  3.      String mydata = uridata.getQueryParameter(“data”);
  4.      …
  5. }

 

  2、编写html页面:

整个页面也许是某个app的详细介绍,这里只写出关键的js代码:

[javascript] view plain copy

  1. function openApp() {
  2.         if (/android/i.test(navigator.userAgent)) {
  3.              var isrefresh = getUrlParam(‘refresh’); // 获得refresh参数
  4.              if(isrefresh == 1) {
  5.                  return
  6.              }
  7.              window.location.href = ‘myapp://xxx/openwith?data=mydata’;
  8.              window.setTimeout(function () {
  9.                      window.location.href += ‘&refresh=1’ // 附加一个特殊参数,用来标识这次刷新不要再调用myapp:// 了
  10.              }, 500);
  11.          }
  12. }

上面代码可以达到这样一个目的,先请求 myapp:// ,如果系统能处理,或者说已经安装了myapp表示的应用,那么就可以打开,另外,如果不能打开,直接刷新一下当前页面,等于是重置location。

天边的星星