1. 程式人生 > 實用技巧 >從Android APP裡面開啟其他應用

從Android APP裡面開啟其他應用

開啟第三方程式

開啟第三方程式需要使用runtime模組

  • 呼叫外部瀏覽器開啟指定的URL
plus.runtime.openURL( url, errorCB, identity );
/** url: ( String ) 必選 要開啟的URL地址:字串型別,各平臺支援的地址型別存在差異,參考平臺URL支援表。*/
/** errorCB: ( OpenErrorCallback ) 可選 開啟URL地址失敗的回撥:開啟指定URL地址失敗時回撥,並返回失敗資訊。*/
/** identity: ( String ) 可選 指定開啟URL地址的程式名稱:在iOS平臺此引數被忽略,在Android平臺為程式包名,如果指定的包名不存在,則開啟URL地址失敗。*/
  • 呼叫第三方程式
plus.runtime.launchApplication( appInf, errorCB );  
/** appInf: ( ApplicationInf ) 必選 要啟動第三方程式的描述資訊
/** errorCB: ( LaunchErrorCallback ) 必選 啟動第三方程式操作失敗的回撥函式,啟動第三方程式失敗時回撥,並返回失敗資訊。

常用URLscheme

[  
    // 只在 ios 中生效  
    {  
        name: 'App Store',  
        scheme: 'itms-apps://'  
    },  
    {  
        name: '支付寶',  
        pname: 'com.eg.android.AlipayGphone',  
        scheme: 'alipay://'  
    },  
    {  
        name: '淘寶',  
        pname: 'com.taobao.taobao',  
        scheme: 'taobao://'  
    },  
    {  
        name: 'QQ',  
        pname: 'com.tencent.mobileqq',  
        scheme: 'mqq://'  
    },  
    {  
        name: '微信',  
        pname: 'com.tencent.mm',  
        scheme: 'weixin://'  
    },  
    {  
        name: '京東',  
        pname: 'com.jingdong.app.mall',  
        scheme: 'openApp.jdMobile://'  
    },  
    {  
        name: '新浪微博',  
        pname: 'com.sina.weibo',  
        scheme: 'sinaweibo://'  
    },  
    {  
        name: '優酷',  
        pname: 'com.youku.phone',  
        scheme: 'youku://'  
    }  
]  

更多實用例子

  • 使用應用商店開啟指定App,可用於引導評分
  • 強制使用應用寶開啟指定App
  • 開啟淘寶搜尋頁面。需要你要做淘寶客,需要向淘寶申請自己的scheme引數並傳入。
  • 開啟地圖並指定地點
  • 開啟qq併到指定聊天介面,可用於客服
    具體程式碼見下:
<template>  
    <view>  
        <page-head title="通過scheme開啟三方app示例"></page-head>  
        <button class="button" @click="openBrowser('https://uniapp.dcloud.io/h5')">使用瀏覽器開啟指定URL</button>  
        <button class="button" @click="openMarket()">使用應用商店開啟指定App</button>  
        <button class="button" @click="openMarket('com.tencent.android.qqdownloader')">強制使用應用寶開啟指定App</button>  
        <button class="button" @click="openTaobao('taobao://s.taobao.com/search?q=uni-app')">開啟淘寶搜尋頁面</button>  
        <button class="button" @click="openMap()">開啟地圖並指定地點</button>  
        <view class="uni-divider">  
            <view class="uni-divider__content">開啟QQ</view>  
            <view class="uni-divider__line"></view>  
        </view>  
        <view class="uni-padding-wrap">  
            <form @submit="openQQ">  
                <view>  
                    <view class="uni-title">請輸入聊天物件QQ號:</view>  
                    <view class="uni-list">  
                        <view class="uni-list-cell">  
                            <input class="uni-input" name="qqNum" type="number"/>  
                        </view>  
                    </view>  
                </view>  
                <view>  
                    <view class="uni-title">請選擇QQ號型別:</view>  
                    <radio-group class="uni-flex" name="qqNumType">  
                        <label>  
                            <radio value="wpa" checked=""/>普通QQ號</label>  
                        <label>  
                            <radio value="crm" />營銷QQ號(無需加好友直接聊天)</label>  
                    </radio-group>  
                </view>  
                <view class="uni-btn-v uni-common-mt">  
                    <button class="button" formType="submit">開啟qq併到指定聊天介面</button>  
                </view>  
            </form>  
        </view>  
    </view>  
</template>
<script>  
export default {  
    data() {  
        return {  

        };  
    },  
    methods: {  
        openBrowser(url){  
            plus.runtime.openURL(url)  
        },  
        openMarket(marketPackageName) {  
            var appurl;  
            if (plus.os.name=="Android") {  
                appurl = "market://details?id=io.dcloud.HelloH5"; //由於hello uni-app沒有上Android應用商店,所以此處打開了另一個示例應用  
            }  
            else{  
                appurl = "itms-apps://itunes.apple.com/cn/app/hello-uni-app/id1417078253?mt=8";  
            }  
            if (typeof(marketPackageName)=="undefined") {  
                plus.runtime.openURL(appurl, function(res) {  
                    console.log(res);  
                });  
            } else{//強制指定某個Android應用市場的包名,通過這個包名啟動指定app  
                if (plus.os.name=="Android") {  
                    plus.runtime.openURL(appurl, function(res) {  
                        plus.nativeUI.alert("本機沒有安裝應用寶");  
                    },marketPackageName);  
                } else{  
                    plus.nativeUI.alert("僅Android手機才支援應用寶");  
                }  
            }  
        },  
        openTaobao(url){  
            plus.runtime.openURL(url, function(res) {  
                uni.showModal({  
                    content:"本機未檢測到淘寶客戶端,是否開啟瀏覽器訪問淘寶?",  
                    success:function(res){  
                        if (res.confirm) {  
                            plus.runtime.openURL("https://s.taobao.com/search?q=uni-app")  
                        }  
                    }  
                })  
            });  
        },  
        openMap(){  
            var url = "";  
            if (plus.os.name=="Android") {  
                var hasBaiduMap = plus.runtime.isApplicationExist({pname:'com.baidu.BaiduMap',action:'baidumap://'});  
                var hasAmap = plus.runtime.isApplicationExist({pname:'com.autonavi.minimap',action:'androidamap://'});  
                var urlBaiduMap = "baidumap://map/marker?location=39.968789,116.347247&title=DCloud&src=Hello%20uni-app";  
                var urlAmap = "androidamap://viewMap?sourceApplication=Hello%20uni-app&poiname=DCloud&lat=39.9631018208&lon=116.3406135236&dev=0"  
                if (hasAmap && hasBaiduMap) {  
                    plus.nativeUI.actionSheet({title:"選擇地圖應用",cancel:"取消",buttons:[{title:"百度地圖"},{title:"高德地圖"}]}, function(e){  
                        switch (e.index){  
                            case 1:  
                                plus.runtime.openURL(urlBaiduMap);  
                                break;  
                            case 2:  
                                plus.runtime.openURL(urlAmap);  
                                break;  
                        }  
                    })  
                }  
                else if (hasAmap) {  
                    plus.runtime.openURL(urlAmap);  
                }  
                else if (hasBaiduMap) {  
                    plus.runtime.openURL(urlBaiduMap);  
                }  
                else{  
                    url = "geo:39.96310,116.340698?q=%e6%95%b0%e5%ad%97%e5%a4%a9%e5%a0%82";  
                    plus.runtime.openURL(url); //如果是國外應用,應該優先使用這個,會啟動google地圖。這個介面不能統一座標系,進入百度地圖時會有偏差  
                }  
            } else{  
                // iOS上獲取本機是否安裝了百度高德地圖,需要在manifest裡配置,在manifest.json檔案app-plus->distribute->apple->urlschemewhitelist節點下新增(如urlschemewhitelist:["iosamap","baidumap"])  
                plus.nativeUI.actionSheet({title:"選擇地圖應用",cancel:"取消",buttons:[{title:"Apple地圖"},{title:"百度地圖"},{title:"高德地圖"}]}, function(e){  
                    console.log("e.index: " + e.index);  
                    switch (e.index){  
                        case 1:  
                            url = "http://maps.apple.com/?q=%e6%95%b0%e5%ad%97%e5%a4%a9%e5%a0%82&ll=39.96310,116.340698&spn=0.008766,0.019441";  
                            break;  
                        case 2:  
                            url = "baidumap://map/marker?location=39.968789,116.347247&title=DCloud&src=Hello%20uni-app";  
                            break;  
                        case 3:  
                            url = "iosamap://viewMap?sourceApplication=Hello%20uni-app&poiname=DCloud&lat=39.9631018208&lon=116.3406135236&dev=0";  
                            break;  
                        default:  
                            break;  
                    }  
                    if (url!="") {  
                        plus.runtime.openURL( url, function( e ) {  
                            plus.nativeUI.alert("本機未安裝指定的地圖應用");  
                        });  
                    }  
                })  
            }  
        },  
        openQQ: function (e) {  
            // console.log("e.detail.value: " + JSON.stringify(e.detail.value));  
            // 沒有校驗qq號是否為空或合法數字,如果不是可用的qq號,啟動qq後會停留在qq主介面  
            plus.runtime.openURL('mqqwpa://im/chat?chat_type=' + e.detail.value.qqNumType + '&uin=' + e.detail.value.qqNum,function (res) {  
                plus.nativeUI.alert("本機沒有安裝QQ,無法啟動");  
            });  
        }  
    }  
};  
</script>  
<style>  
.button {  
    margin: 30upx;  
    color: #007AFF;  
}  
</style>  

詳細內容參考 uni-app 中如何開啟外部應用,如:瀏覽器、淘寶、AppStore、QQ等