cordova插件权限在我的应用程序中不起作用

问题描述 投票:0回答:1

朋友们提前谢谢。这是我的第一个问题。我不是Cordova开发人员,但由于某些情况,我必须开发Cordova应用程序。我的应用程序以前的目标是Android API级别22,现在我的目标是API级别26。

从上面的API级别,22个机器人需要运行时权限,我正在尝试在我的应用程序中实现权限代码。

我需要将pdf文件从我的应用程序复制到设备内存。我已经编写了复制文件的代码,它在Android API级别22上工作正常,但在android API级别23以上没有工作。

为了解决这个问题,我需要在Cordova应用程序中添加权限。

我使用以下插件获取cordova插件添加cordova-plugin-permission权限

以下是我的index.js代码

var app = {
    // Application Constructor
        initialize: function() {
        this.bindEvents();
    },
    // Bind Event Listeners
    //
    // Bind any events that are required on startup. Common events are:
    // 'load', 'deviceready', 'offline', and 'online'.
        bindEvents: function() {
            document.addEventListener('deviceready', this.onDeviceReady, false);
        },
     //deviceready Event Handler
     //
     // The scope of 'this' is the event. In order to call the     'receivedEvent'
    // function, we must explicitly call 'app.receivedEvent(...);'
        onDeviceReady: function() {
           app.receivedEvent('deviceready');
		
         // **my permission code**
        var Permission = cordova.plugins.Permission

        var permission = 'android.permission.WRITE_EXTERNAL_STORAGE'

        Permission.has(permission,function(results){
            if(!results[permission])
            {
                Permission.request(permission,function(results){
                    if(results[permission]){
                          alert("permission granted");
                   }
                },alert("permission failed"))
                alert("permission granted failed");
            }
        }, alert("permission failed"))

              
                   asset2sd.copyDir({
                   asset_directory: "www/pdf",
                   destination_directory: "crisispdf",
                 },
                 function () {
                           //alert('success');
                 },
                 function () {
                     //alert('fail');
                 }
                 );  

        
	},
    // Update DOM on a Received Event
    receivedEvent: function(id) {
        var parentElement = document.getElementById(id);
        var listeningElement = parentElement.querySelector('.listening');
        var receivedElement = parentElement.querySelector('.received');

       

        console.log('Received Event: ' + id);
    }
     };

     app.initialize();

以下是我的config.xml

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.atlascopco.crisis" version="1.0.13" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name>Crisis Management</name>
    <description>
        Crisis Management 
    </description>
    <author email="[email protected]" href="http://cordova.io">
        Atlas Copco Team
    </author>
    <content src="index.html" />
    <access origin="*" />
    <access launch-external="yes" origin="mailto:*" />
    <access launch-external="yes" origin="tel:*" />
    <plugin name="cordova-plugin-inappbrowser" spec="^1.7.1" />
    <plugin name="cordova-plugin-wkwebview-engine" spec="^1.1.3" />
    <plugin name="cordova-plugin-permission" spec="^0.1.0" />
    <platform name="android">
        <uses-permission android:maxSdkVersion="26" android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:maxSdkVersion="26" android:name="android.permission.READ_EXTERNAL_STORAGE" />
    </platform>
    <engine name="android" spec="^7.1.4" />
</widget>

以下是我创建调试apk后Android平台的Android Manifest文件

<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="10013" android:versionName="1.0.13" package="com.atlascopco.crisis" xmlns:android="http://schemas.android.com/apk/res/android">
    <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
    <uses-permission android:name="android.permission.INTERNET" />
    <application android:hardwareAccelerated="true" android:icon="@mipmap/icon" android:label="@string/app_name" android:supportsRtl="true">
        <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize">
            <intent-filter android:label="@string/launcher_name">
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="27" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
</manifest>

在Chrome浏览器中检查时,请告诉我代码中的问题,它显示以下结果,并且在应用启动时没有获得权限弹出窗口enter image description here

cordova cordova-plugins
1个回答
0
投票

试试此代码

var app = {
    // Application Constructor
        initialize: function() {
        this.bindEvents();
    },
    // Bind Event Listeners
    //
    // Bind any events that are required on startup. Common events are:
    // 'load', 'deviceready', 'offline', and 'online'.
        bindEvents: function() {
            document.addEventListener('deviceready', this.onDeviceReady, false);
        },
     //deviceready Event Handler
     //
     // The scope of 'this' is the event. In order to call the     'receivedEvent'
    // function, we must explicitly call 'app.receivedEvent(...);'
        onDeviceReady: function() {
           app.receivedEvent('deviceready');
		
         // **my permission code**
        var permission = cordova.plugins.permissions;

        permission.hasPermission(permission.WRITE_EXTERNAL_STORAGE,function(results){
            if(!results[permission])
            {
                permission.requestPermission(permission.WRITE_EXTERNAL_STORAGE,function(results){
                    if(results[permission]){
                          alert("permission granted");
                   }
                },alert("permission failed"))
                alert("permission granted failed");
            }
        }, alert("permission failed"))

              
                   asset2sd.copyDir({
                   asset_directory: "www/pdf",
                   destination_directory: "crisispdf",
                 },
                 function () {
                           //alert('success');
                 },
                 function () {
                     //alert('fail');
                 }
                 );  

        
	},
    // Update DOM on a Received Event
    receivedEvent: function(id) {
        var parentElement = document.getElementById(id);
        var listeningElement = parentElement.querySelector('.listening');
        var receivedElement = parentElement.querySelector('.received');

       

        console.log('Received Event: ' + id);
    }
     };

     app.initialize();
© www.soinside.com 2019 - 2024. All rights reserved.