H5中啟動Android app
阿新 • • 發佈:2019-02-18
H5中判斷應用是否安裝
H5中是無法直接判斷應用是否安裝的,但是可以間接判斷。
第一種方式,
if(...){
document.location = '';
setTimeout(function(){
//此處如果執行則表示沒有app
},200);
}
這裡的邏輯很簡單,當沒有成功開啟app的時候
新頁面不會彈出則頁面邏輯可言進行,如果進入了新頁面,則頁面邏輯便終止了
所以我們可以另開一個延時的執行緒來判斷這個事情。
通過H5喚起APP
編輯AndroidManifest.xml,主要是增加第二個<intent-filter>,launchapp用來標識schema,最好能保證手機系統唯一,那樣就可以開啟應用,而不是彈出一個選擇框。可以附帶自己的資料通過string傳遞到activity,比如完整url為 launchapp://?data=mydata。
然後通過activity獲得data資料:<activity android:name="com.robert.MainActivity" android:configChanges="orientation|keyboardHidden|navigation|screenSize" android:screenOrientation="landscape" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.DEFAULT"/> <data android:scheme="launchapp" android:pathPrefix="/haha" /> </intent-filter> </activity>
public void onCreate(Bundle savedInstanceState) {
Uri uridata = this.getIntent().getData();
String mydata = uridata.getQueryParameter("data");
}
HTML程式碼
下面程式碼可以達到這樣一個目的,先請求 launchapp:// ,如果系統能處理,或者說已經安裝了myapp表示的應用,那麼就可以開啟,另外,如果不能開啟,直接重新整理一下當前頁面,等於是重置location
function openApp() {
if (/android/i.test(navigator.userAgent)) {
var isrefresh = getUrlParam('refresh'); // 獲得refresh引數
if(isrefresh == 1) {
return
}
window.location.href = 'launchapp://haha?data=mydata';
window.setTimeout(function () {
window.location.href += '&refresh=1' // 附加一個特殊引數,用來標識這次重新整理不要再呼叫myapp:// 了
}, 500);
}
}