2016-12-08 12 views
0

初めて質問がありましたので、何かお見逃し申し上げます。イオンのパーミッションは変更されません(アンドロイド)

私はクロスプラットフォームアプリケーションを開発しようとしていますが、現在アンドロイドでテストしていますが、デフォルトの「フルネットワークアクセス」権限を除いたアクセス許可を取得できません。私は具体的にCALL_PHONE権限を取得しようとしていますが、ほかの人もテストしようとしています。

私はCordova-plugins-android-permissionsとCordova-plugins-diagnosticの両方を使用しようとしましたが、ページ上のサンプル関数を呼び出すことに失敗しているようです(警告(cordova.plugins。パーミッション)は未定義を返します。

SDK 22と24の両方でアプリケーションを試してみましたが、pre-marshmallowで動作するパーミッションを得ることはできますが、何の効果もありません(これには独自の要求は必要ありません)。

私のindex.html(私のメインページ)、config.xml、androidmanifest.xmlを以下で囲んでいます。

ありがとうございます。

Index.htmlと:

<!DOCTYPE html> 
<html> 
    <head> 
    <script src="../jquery-3.1.1.min.js"></script> 
<link rel="stylesheet" href="../jquery-ui.css"> 
<script src="jquery-3.1.1.min.js"></script> 
<link rel="stylesheet" href="jquery-ui.css"> 
<link rel="stylesheet" href="lone.css"> 
<script src="js/MainCtrl.js"></script> 
    <script> 
    $ionicPlatform.ready(function() { 
     window.plugin.notification.local.promptForPermission(); 
}); 
    window.onload = function(){ 
    window.PhoneCaller.call("//Editing for privacy", onSuccess, onError); 
    var permissions = cordova.plugins.permissions; 
permissions.hasPermission(permissions.CAMERA, checkPermissionCallback, null); 

function checkPermissionCallback(status) { 
    if(!status.hasPermission) { 
    var errorCallback = function() { 
     alert('Camera permission is not turned on'); 
    } 

    permissions.requestPermission(
     permissions.CAMERA, 
     function(status) { 
     if(!status.hasPermission) errorCallback(); 
     }, 
     errorCallback); 
    } 
} 
    //window.location.href ="test.java"; 
    var check = 1; 
    var url=window.location.href 
    url = url.substring(url.indexOf(".html")+5,url.length); 
    if(url.length>0){ 
     try{ 
      localStorage.removeItem("name"); 
      localStorage.removeItem("no"); 
      localStorage.removeItem("email"); 
      localStorage.removeItem("timer"); 
     } 
     catch(err){ 

     } 
     var bigname = url.substring(url.indexOf("name=")+5,url.indexOf("&")); 
     localStorage.setItem("name",bigname); 
     url=url.substring(url.indexOf(bigname)+bigname.length+1,url.length); 
     var bigno = url.substring(url.indexOf("noin=")+5,url.indexOf("&")); 
     localStorage.setItem("no",bigno); 
     url=url.substring(url.indexOf(bigno)+bigno.length+1,url.length); 
     var bigemail = url.substring(url.indexOf("email=")+6,url.indexOf("&")); 
     localStorage.setItem("email",bigemail); 
     url=url.substring(url.indexOf(bigemail)+bigemail.length+1,url.length); 
     var bigtimer = url.substring(url.indexOf("timer=")+6,url.indexOf("&")); 
     localStorage.setItem("timer",bigtimer); 

    } 
    } 
     function test(){ 
      if(check == 1){ 
    document.getElementById("call").click; 
     $('#call')[0].click(); 
      undo(); 
      } 
     } 
     function undo(){ 
      check = 0; 
      wait(500); 
      check = 1; 
     } 
     function move(){ 
     try{ 
      window.location.href = "task.html?name=" + localStorage.getItem('name') + "&noin=" + localStorage.getItem('no') + "&email=" + localStorage.getItem('email') + "&timer=" + localStorage.getItem('timer') +"&"; 
      } 
      catch(err){ 

      } 
     } 
     function onSuccess(result){ 
    alert("Success:"+result); 
} 

function onError(result) { 
    alert("Error:"+result); 
} 
    </script> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"> 
    <title></title> 

    <link rel="manifest" href="manifest.json"> 
    <link href="lib/ionic/css/ionic.css" rel="stylesheet"> 
    <link href="css/style.css" rel="stylesheet"> 
    <script src="lib/ionic/js/ionic.bundle.js"></script> 
    <script src="cordova.js"></script> 
    <script src="js/app.js"></script> 
    <script src="js/controllers.js"></script> 
    <script src="js/services.js"></script> 
    </head> 
    <body id="bod" ng-app="starter" ng-controller="MainCtrl"> 
    <div id="mainbutt" onclick="move()"> 
    &nbsp; 
    </div> 
    <div id="settings" onclick="location.href='settings.html'"> 
    &nbsp; 
    </div> 
    <a id="call" href="tel://Edited for privacy" ng-href="tel://Edited For Privacy" onclick="test()"><span id="callspan">CALL</span></a> 
    </body> 
</html> 

のconfig.xml:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<widget id="com.ionicframework.loneworker957777" version="0.0.3" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0" xmlns:gap="http://phonegap.com/ns/1.0" xmlns:android="http://schemas.android.com/apk/res/android"> 
    <name>LoneWorker</name> 
    <description> 
     An Ionic Framework and Cordova project. 
    </description> 
    <author email="[email protected]" href="http://example.com.com/"> 
     Your Name Here 
    </author> 
    <content src="index.html"/> 
    <access origin="*"/> 
    <allow-intent href="tel:*" launch-external="yes"/> 
    <preference name="webviewbounce" value="false"/> 
    <preference name="UIWebViewBounce" value="false"/> 
    <preference name="DisallowOverscroll" value="true"/> 
    <preference name="SplashScreenDelay" value="2000"/> 
    <preference name="FadeSplashScreenDuration" value="2000"/> 
    <preference name="android-minSdkVersion" value="16"/> 
    <preference name="BackupWebStorage" value="none"/> 
    <preference name="SplashScreen" value="screen"/> 
    <feature name="StatusBar"> 
    <param name="ios-package" value="CDVStatusBar" onload="true"/> 
    </feature> 
    <feature name="NetworkStatus"> 
    <param name="android-package" value="CDVConnection"/> 
    </feature> 
    <platform name="ios"> 
    <icon src="resources\ios\icon\icon.png" width="57" height="57"/> 
    <icon src="resources\ios\icon\[email protected]" width="114" height="114"/> 
    <icon src="resources\ios\icon\icon-40.png" width="40" height="40"/> 
    <icon src="resources\ios\icon\[email protected]" width="80" height="80"/> 
    <icon src="resources\ios\icon\[email protected]" width="120" height="120"/> 
    <icon src="resources\ios\icon\icon-50.png" width="50" height="50"/> 
    <icon src="resources\ios\icon\[email protected]" width="100" height="100"/> 
    <icon src="resources\ios\icon\icon-60.png" width="60" height="60"/> 
    <icon src="resources\ios\icon\[email protected]" width="120" height="120"/> 
    <icon src="resources\ios\icon\[email protected]" width="180" height="180"/> 
    <icon src="resources\ios\icon\icon-72.png" width="72" height="72"/> 
    <icon src="resources\ios\icon\[email protected]" width="144" height="144"/> 
    <icon src="resources\ios\icon\icon-76.png" width="76" height="76"/> 
    <icon src="resources\ios\icon\[email protected]" width="152" height="152"/> 
    <icon src="resources\ios\icon\[email protected]" width="167" height="167"/> 
    <icon src="resources\ios\icon\icon-small.png" width="29" height="29"/> 
    <icon src="resources\ios\icon\[email protected]" width="58" height="58"/> 
    <icon src="resources\ios\icon\[email protected]" width="87" height="87"/> 
    <splash src="resources\ios\splash\[email protected]~iphone.png" width="640" height="1136"/> 
    <splash src="resources\ios\splash\Default-667h.png" width="750" height="1334"/> 
    <splash src="resources\ios\splash\Default-736h.png" width="1242" height="2208"/> 
    <splash src="resources\ios\splash\Default-Landscape-736h.png" width="2208" height="1242"/> 
    <splash src="resources\ios\splash\[email protected]~ipad.png" width="2048" height="1536"/> 
    <splash src="resources\ios\splash\Default-Landscape~ipad.png" width="1024" height="768"/> 
    <splash src="resources\ios\splash\[email protected]~ipad.png" width="1536" height="2048"/> 
    <splash src="resources\ios\splash\Default-Portrait~ipad.png" width="768" height="1024"/> 
    <splash src="resources\ios\splash\[email protected]~iphone.png" width="640" height="960"/> 
    <splash src="resources\ios\splash\Default~iphone.png" width="320" height="480"/> 
    </platform> 
    <platform name="android"> 
    <config-file target="AndroidManifest.xml"> 
     <uses-permission android:name="android.permission.SEND_SMS"/> 
     <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
     <uses-permission android:name="android.permission.CALL_PHONE"/> 
     <uses-permission android:name="android.permission.CAMERA"/> 
     <uses-permission android:name="android.permission.CALL_PRIVILEGED"/> 
     <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> 
     <uses-permission android:name="android.permission.INTERNET"/> 
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
     <uses-permission android:name="android.permission_group.PHONE"/> 
     <uses-permission android:name="android.permission.READ_CONTACTS"/> 
     <uses-permission android:name="android.permission.WRITE_CONTACTS"/> 
     <uses-permission android:name="android.permission.GET_ACCOUNTS"/> 
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
     <uses-feature android:name="android.software.sip" android:required="true"/> 
     <uses-feature android:name="android.software.sip.voip" android:required="true"/> 
     <uses-feature android:name="android.software.sip" android:required="true"/> 
     <uses-feature android:name="android.hardware.telephony" android:required="false"/> 
    </config-file> 
    <icon src="resources\android\icon\drawable-ldpi-icon.png" density="ldpi"/> 
    <icon src="resources\android\icon\drawable-mdpi-icon.png" density="mdpi"/> 
    <icon src="resources\android\icon\drawable-hdpi-icon.png" density="hdpi"/> 
    <icon src="resources\android\icon\drawable-xhdpi-icon.png" density="xhdpi"/> 
    <icon src="resources\android\icon\drawable-xxhdpi-icon.png" density="xxhdpi"/> 
    <icon src="resources\android\icon\drawable-xxxhdpi-icon.png" density="xxxhdpi"/> 
    <splash src="resources\android\splash\drawable-land-ldpi-screen.png" density="land-ldpi"/> 
    <splash src="resources\android\splash\drawable-land-mdpi-screen.png" density="land-mdpi"/> 
    <splash src="resources\android\splash\drawable-land-hdpi-screen.png" density="land-hdpi"/> 
    <splash src="resources\android\splash\drawable-land-xhdpi-screen.png" density="land-xhdpi"/> 
    <splash src="resources\android\splash\drawable-land-xxhdpi-screen.png" density="land-xxhdpi"/> 
    <splash src="resources\android\splash\drawable-land-xxxhdpi-screen.png" density="land-xxxhdpi"/> 
    <splash src="resources\android\splash\drawable-port-ldpi-screen.png" density="port-ldpi"/> 
    <splash src="resources\android\splash\drawable-port-mdpi-screen.png" density="port-mdpi"/> 
    <splash src="resources\android\splash\drawable-port-hdpi-screen.png" density="port-hdpi"/> 
    <splash src="resources\android\splash\drawable-port-xhdpi-screen.png" density="port-xhdpi"/> 
    <splash src="resources\android\splash\drawable-port-xxhdpi-screen.png" density="port-xxhdpi"/> 
    <splash src="resources\android\splash\drawable-port-xxxhdpi-screen.png" density="port-xxxhdpi"/> 
    </platform> 
    <platform name="wp8"> 
    <icon src="resources\wp8\icon\ApplicationIcon.png" width="99" height="99"/> 
    <icon src="resources\wp8\icon\Background.png" width="159" height="159"/> 
    <splash src="resources\wp8\splash\SplashScreenImage.png" width="768" height="1280"/> 
    </platform> 
    <icon src="resources\android\icon\drawable-xhdpi-icon.png"/> 
</widget> 

のAndroidManifest.xml:

<?xml version='1.0' encoding='utf-8'?> 
<manifest android:versionCode="3" android:versionName="0.0.3" package="com.ionicframework.loneworker957777" xmlns:android="http://schemas.android.com/apk/res/android"> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.VIBRATE" /> 
    <uses-feature android:name="android.hardware.telephony" android:required="false" /> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.SEND_SMS" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.CAMERA" /> 
    <uses-permission android:name="android.permission.CALL_PHONE" /> 
    <uses-permission android:name="android.permission.CALL_PRIVILEGED" /> 
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-feature android:name="android.software.sip" android:required="false" /> 
    <uses-feature android:name="android.software.sip.voip" android:required="false" /> 
    <uses-feature android:name="android.software.sip" android:required="false" /> 
    <uses-permission android:name="android.permission.READ_CONTACTS" /> 
    <uses-permission android:name="android.permission.WRITE_CONTACTS" /> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-feature android:name="android.hardware.telephony" android:required="false" /> 
    <uses-permission android:name="android.permission.SEND_SMS" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.CALL_PHONE" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <application android:label="@string/app_name"> 
     <activity android:label="@string/activity_name" android:launchMode="singleTop" android:name="index"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
    <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="22" /> 
    <uses-permission android:name="android.permission_group.PHONE" /> 
</manifest> 

EDITは:明確にしている必要があります - 携帯電話の通話終了のために私は」私のアプリがアンドロイドのCALL_PHONEパーミッションを使って電話番号を直接呼び出すのを探していたら、phonebooを開くのではなくk。テスト機能は、電話帳を開く限り正しく動作するようにしていますが、すぐに電話をかけたいと思っています。

EDIT2:android.permissionsプラグインに関連するので、以下のplugin.xmlとpermissions.javaを追加してください。

のplugin.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     id="cordova-plugin-android-permissions" 
     version="0.10.0"> 

    <name>Permissions</name> 

    <description>Android permissions support library.</description> 

    <author>Jason Yang</author> 

    <engines> 
    <engine name="cordova" version=">=5.0.0"/> 
    </engines> 

    <!-- android --> 
    <platform name="android"> 
    <js-module src="www/permissions.js" name="Permissions"> 
     <clobbers target="cordova.plugins.permissions" /> 
    </js-module> 

    <config-file target="res/xml/config.xml" parent="/*"> 
     <feature name="Permissions"> 
     <param name="android-package" value="com.android.plugins.Permissions" /> 
     </feature> 
    </config-file> 

    <source-file src="src/android/com/android/plugins/Permissions.java" target-dir="src/com/android/plugins"/> 
    </platform> 

</plugin> 

permissions.java:

// Here, thisActivity is the current activity 
if (ContextCompat.checkSelfPermission(thisActivity, 
       Manifest.permission.READ_CONTACTS) 
     != PackageManager.PERMISSION_GRANTED) { 

    // Should we show an explanation? 
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, 
      Manifest.permission.READ_CONTACTS)) { 

      ActivityCompat.requestPermissions(thisActivity, 
       new String[]{Manifest.permission.READ_CONTACTS}, 
       MY_PERMISSIONS_REQUEST_READ_CONTACTS); 
     // Show an explanation to the user *asynchronously* -- don't block 
     // this thread waiting for the user's response! After the user 
     // sees the explanation, try again to request the permission. 

    } else { 

     // No explanation needed, we can request the permission. 

     ActivityCompat.requestPermissions(thisActivity, 
       new String[]{Manifest.permission.READ_CONTACTS}, 
       MY_PERMISSIONS_REQUEST_READ_CONTACTS); 

     // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an 
     // app-defined int constant. The callback method gets the 
     // result of the request. 
    } 
} 

コメントはありませんところで私から、著者からです。

+0

window.PhoneCaller.callは最初の引数として文字列を受け取りますか?これに関するドキュメントへのリンクがありますか? Object.callは通常これをオブジェクトまたはnullにします – chriskelly

+0

window.PhoneCaller.callはhttps://github.com/codebakery/cordova-plugin-phonecallerから来ます - 他のプラグイン直接電話すると、test()は番号付きの電話帳を呼び出すことで正しく動作します。しかし、私はCALL_PHONE権限を使って直接呼び出すことができるようにする必要があります(これは元々申し訳ありませんが、私は編集を追加します)。 –

+0

プラグインをインストールしたと仮定すると(config.xmlには表示されません(おそらく--saveフラグがないため)、通常、プラグインのplugin.xmlにアクセス権があります。 ''のようなものです。しかし、そこには存在せず、このプラグインはバージョン0.0.2です。たぶん別のプラグインを見つけたり、このプラグインをforkしてplugin.xmlを自分で調整したりします。 – JanP

答えて

0

私はこのエラーを解決しました。

/package.jsonの最初のpackage.jsonは、デフォルト領域が追加されているだけで、「cordovaPlugins」を正しく構築できませんでした。

私の古いファイルが持っていた:

"cordova-plugin-whitelist", 
"cordova-plugin-statusbar", 
"cordova-plugin-console", 
"cordova-plugin-device", 
"cordova-plugin-splashscreen", 

を今私が追加しました:

"ionic-plugin-keyboard", 
"cordova-plugin-android-permissions", 
"cordova.plugins.diagnostic", 
"cordova-plugin-settings-hook", 
"cordova-plugin-statusbar", 
"cordova-plugin-vibration", 
"cordova-sms-plugin", 
"call-number" 

は、これは私が(現在のSDK 22を使用して)すぐに持っていた権限の問題を解決しました。

私はその後、「コール数の使用:

、ヘルプ皆のためのおかげで問題を修正
window.plugins.CallNumber.callNumber(onSuccess, onError, /*Put a String number here*/, true); 

を。

関連する問題