Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android js啟動APK

Android js啟動APK

編輯:關於Android編程

1.在移動設備訪問m.alipay.com時,如果本地安裝了支付寶客戶端,則浏覽器會調用本地客戶端,沒有安裝則會跳轉到下載頁面,提示安裝。剛好有這樣的需求,就分析了下支付寶的實現。網上參考了其他人的實現,大部分都是關於APK和本地js交互,相關資料可以參考

http://developer.android.com/guide/webapps/webview.html官方的開發指南。

\

2. APK啟動流程

在啟動APK時,系統會發出對應的intent,根據包名加intent來啟動對應activity,activity如果存在對應的intent-filter則啟動該應用,如果多個應用同時匹配,則會出現選擇框讓用戶選擇。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+yOfPwqOsxvS2r2RlbW8udGVzdGpz06bTw7XETWFpbkFjdGl2aXR5PC9wPgo8cD5BY3Rpdml0eU1hbmFnZXIoMzEzKTpTVEFSVHthY3Q9YW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4gY2F0PVthbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUl1mbGc9MHgxMDIwMDAwMCBjbXA9ZGVtby50ZXN0anMvLk1haW5BY3Rpdml0eSBibmRzPVsxMyw3Nl1bMTI3LDIxMV19IGZyb20gcGlkNjA3PC9wPgo8cD4gPC9wPgo8cD4zLuSvwMDG97rNsb612EFQS7XEvbu7pTwvcD4KPHA+QW5kcm9pZCBtYW5pZmVzdLHqx6myzr+8udm3vbXEv6q3ota4xM88L3A+CjxwPmh0dHA6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vZ3VpZGUvdG9waWNzL21hbmlmZXN0L21hbmlmZXN0LWludHJvLmh0bWwgPC9wPgo8cD7PwsPmysdVQ7XE0ru49jxpbnRlbnQtZmlsdGVyPjwvcD4KPHA+PGludGVudC1maWx0ZXI+PC9wPgo8cD48YWN0aW9uYW5kcm9pZDpuYW1lPQ=="android.intent.action.VIEW" />

設置

標簽,可以攔截浏覽器的請求,data可以增加過濾的條件。為了防止我們的啟動APK scheme被其它應用攔截,盡量使用唯一的標識符如域名等。

在android應用中application的詳細配置實例:

在MainActivity增加了

"android.intent.action.VIEW"/>

"android.intent.category.DEFAULT"/>

"android.intent.category.BROWSABLE"/>

"testjs"/>

過濾器。

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme">

android:name="demo.testjs.MainActivity"

android:label="@string/app_name">

"android.intent.action.MAIN"/>

"android.intent.category.LAUNCHER"/>

"android.intent.action.VIEW"/>

"android.intent.category.DEFAULT"/>

"android.intent.category.BROWSABLE"/>

"testjs"/>

在web頁面中加入如下測試代碼

測試頁面

"index.jsp"id="openApp"style="display:none">APK客戶端下載鏈接

<scripttype=>

//ios判斷 if(navigator.userAgent.match(/(iPhone|iPod|iPad);?/i))

//判斷是否是android設備浏覽器 if(navigator.userAgent.match(/android/i)) {

if (navigator.userAgent.match(/android/i)) {

document.getElementById('openApp').onclick =function(e) {

// 通過iframe的方式試圖打開APP,如果能正常打開,會直接切換到APP,並自動阻止a標簽的默認行為

// 否則打開a標簽的href鏈接

var ifrSrc ='testjs://platformapi/startApp?name=tom&age=18';

if (!ifrSrc) {

return;

}

var ifr = document.createElement('iframe');

ifr.src = ifrSrc;

ifr.style.display = 'none';

document.body.appendChild(ifr);

setTimeout(function() {

document.body.removeChild(ifr);

}, 1000);

};

if (document.all) {

document.getElementById('openApp').click();

}

// 其它浏覽器

else {

var e = document.createEvent("MouseEvents");

e.initEvent("click",true,true);

document.getElementById("openApp").dispatchEvent(e);

}

}

</script>

新建web工程,加入測試頁面。在手機浏覽器上訪問該頁面,如果本地安裝了對應的APK,則會啟動APK,沒有安裝則跳轉到對應的下載頁面。以上web頁面的腳本從支付寶手機客戶端訪問的頁面截取的。(UC7.8版本的android浏覽器可以下載保存網頁)

4.獲取浏覽器傳遞的值

var ifrSrc = 'testjs://platformapi/startApp?name=tom&age=18';

實例中會提交name和age值

在activity中可以取到通過浏覽器傳遞的值

@Override

protected void onCreate(BundlesavedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

if(Intent.ACTION_VIEW.equals(getIntent().getAction())){

Intentintent = getIntent();

Stringscheme = intent.getScheme();

Uriuri = intent.getData();

Log.e(tag,"scheme: "+scheme);

Log.e(tag,"path: "+uri.getPath());

Log.e(tag,"Host: "+uri.getHost());

Log.e(tag,"name: "+uri.getQueryParameter("name"));

Log.e(tag,"age: "+uri.getQueryParameter("age"));

}

}

可以取到scheme、 url、參數列表等信息

PS:浏覽器實際上沒有辦法判斷到本地是否安裝了對應的APK文件,支付寶的web前端實現實際上了打開了一個隱藏的url地址,該url如果被本地apk攔截,則啟動本地apk,如果url沒有被攔截,則在1S後刪除添加的'iframe',跳轉到下載頁面。(不管url是否被本地攔截成功,1S後都會跳轉下載頁面,只不過攔截成功,本地APK啟動頁面會遮住浏覽器的下載頁面)

參考其它人用window.location 或 window.open標簽也可以啟動本地APK,但沒有處理url跳轉不存在的問題。(window.open未測試成功)

window.location實現方式:

AndroidManifest.xml配置

"android.intent.action.VIEW"/>

"android.intent.category.DEFAULT"/>

"android.intent.category.BROWSABLE"/>

"testjs"android:host="demo.testjs"/>

web頁面添加

<scripttype=>

alert("啟動APK");

window.location="testjs://demo.testjs";

</script>

源碼下載:

http://download.csdn.net/detail/qq1761310972/6794481

http://pan.baidu.com/s/1pJk8cmn 在android2.3+tomcat6+win7測試通過

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved