簡體   English   中英

PhoneGap中Android Marshmallow的應用權限

[英]App permissions on Android Marshmallow in PhoneGap

在Android Marshmallow中,我們需要在Apps中分別授予對Location,File等的訪問權限。 在PhoneGap應用程序中是否有任何我可以檢查權限是否可用並提示用戶提供權限。

更新2016年2月16日

Phonegap Build現在支持API 23 - hoooray!

或者如果您在本地構建,只需Cordova / Phonegap CLI 6+,默認情況下您將獲得cordova-android @ 5 +平台。

原始答案

目前,使用Cordova / Phonegap CLI確實可以實現這一點,但Phonegap Build尚不支持API 23(Android 6.0 / Marshmallow)。

首先,您需要使用Android平台的v5.0.0(或更高版本),它使用API​​ 23。

截至今天,默認版本為4.1.1(使用API​​ 22),因此您需要在添加平台時明確指定版本:

cordova platform add android@5.0.0
phonegap platform add android@5.0.0

核心插件本身正在升級以支持請求適當的Android 6運行時權限。 因此,您需要直接從GitHub repos的主分支安裝“前沿”版本,而不是通過npm插件注冊表。 例如,使用:

cordova plugin add https://github.com/apache/cordova-plugin-file

哪個應該是你的版本4.0.1-dev。

不是npm發布版本:

cordova plugin add cordova-plugin-file

這將獲得v3.0.0

請注意,主分支上的版本不是版本,因此可能包含錯誤。

所以替代方案(我選擇了)是繼續使用插件的發布版本(它還不支持請求Android運行時權限),但是使用cordova-diagnostic-plugin來請求Android運行時權限在嘗試使用核心插件API之前需要相應的核心插件。

例如,要使用Location插件,請繼續通過npm使用發行版:

cordova plugin add cordova-plugin-geolocation

但在請求位置之前,請確保已使用診斷插件授予運行時權限:

function requestLocation(){
    navigator.geolocation.getCurrentPosition(onSuccess, onError, options);
}

cordova.plugins.diagnostic.getLocationAuthorizationStatus(function(status){
    if(status == "GRANTED"){
        requestLocation();
    }else{
        cordova.plugins.diagnostic.requestLocationAuthorization(function(status){
                if(status == "GRANTED"){
                    requestLocation();  
                }else{
                    // Handle other cases
                }
            }, function(error){
                console.error(error);
        });
    }
}, onError);

可以明確要求用戶使用以下Cordova插件啟用特定權限: https//www.npmjs.com/package/cordova-plugin-android-permissions

特別是對於較舊的插件,這可能非常有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM