【问题标题】:Cordova plugins not workingCordova 插件不工作
【发布时间】:2014-12-26 13:36:26
【问题描述】:

编辑澄清: 您在以下某些文件中看到的<name> 实际上并不是文件的一部分,但它包含我必须审查的公司名称。

测试情况:

  • 科尔多瓦 4
  • OS X 优胜美地
  • Android 4.4 设备(连接 USB)
  • 使用终端;不是 Eclipse

会发生什么: 使用cordova run --release 成功构建和签名.apk 并且移动设备安装并打开它没有问题。但是,这些插件都不起作用。例如:

    title.on('click', function() {
        if (!navigator.camera) {
            alert('no camera!');
        } else {
            navigator.camera.getPicture(function success(data) {
            // do something
            }, function error(data) {});
        }
    });

始终提醒没有摄像头,这意味着 Cordova 没有将 camera 对象添加到 window.navigator 对象。

以下是有关我的 cordova 安装和一些 xml 文件的一些信息,据我所知,没有什么不合适的。请注意,不只是相机不工作,我只是以它为例。

科尔多瓦信息:

Node version: v0.10.29

Cordova version: 4.0.1-nightly.2014.9.29

Config.xml file: 

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.<name>.App" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name><name> Mini</name>
    <description>
        De <name> app voor je telefoon
    </description>
    <author email="stephan@<name>.nl" href="https://<name>.nl">
        Het <name> Team
    </author>
    <content src="index.html" />
    <access origin="*" />
    <preference name="SplashScreen" value="screen" />
    <preference name="SplashScreenDelay" value="2000" />
</widget>


Plugins: 

org.apache.cordova.camera,org.apache.cordova.dialogs,org.apache.cordova.file,org.apache.cordova.file-transfer,org.apache.cordova.media,org.apache.cordova.media-capture,org.apache.cordova.splashscreen,org.apache.cordova.vibration

Android platform:

Available Android targets:
----------
id: 1 or "android-19"
     Name: Android 4.4.2
     Type: Platform
     API level: 19
     Revision: 4
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in
 Tag/ABIs : default/armeabi-v7a, default/x86

cordova/config.xml

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.<name>.App" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name><name> Mini</name>
    <description>
        De <name> app voor je telefoon
    </description>
    <author email="stephan@<name>.nl" href="https://<name>.nl">
        Het <name> Team
    </author>
    <content src="index.html" />
    <access origin="*" />
    <preference name="SplashScreen" value="screen" />
    <preference name="SplashScreenDelay" value="2000" />
</widget>

cordova/platforms/android/AndroidManifest.xml

?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="com.kaartje2go.App" 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="@drawable/icon" android:label="@string/app_name">
        <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="CordovaApp" android:theme="@android:style/Theme.Black.NoTitleBar" 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="10" android:targetSdkVersion="19" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.RECORD_VIDEO" />
    <uses-permission android:name="android.permission.VIBRATE" />
</manifest>

cordova/platforms/android/res/xml/config.xml

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.<name>.App" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <preference name="loglevel" value="DEBUG" />
    <feature name="Camera">
        <param name="android-package" value="org.apache.cordova.camera.CameraLauncher" />
    </feature>
    <feature name="Notification">
        <param name="android-package" value="org.apache.cordova.dialogs.Notification" />
    </feature>
    <feature name="File">
        <param name="android-package" value="org.apache.cordova.file.FileUtils" />
        <param name="onload" value="true" />
    </feature>
    <feature name="FileTransfer">
        <param name="android-package" value="org.apache.cordova.filetransfer.FileTransfer" />
    </feature>
    <feature name="Media">
        <param name="android-package" value="org.apache.cordova.media.AudioHandler" />
    </feature>
    <feature name="Capture">
        <param name="android-package" value="org.apache.cordova.mediacapture.Capture" />
    </feature>
    <feature name="SplashScreen">
        <param name="android-package" value="org.apache.cordova.splashscreen.SplashScreen" />
    </feature>
    <feature name="Vibration">
        <param name="android-package" value="org.apache.cordova.vibration.Vibration" />
    </feature>
    <name><name> Mini</name>
    <description>
        De <name> app voor je telefoon
    </description>
    <author email="stephan@<name>.nl" href="https://<name>.nl">
        Het <name> Team
    </author>
    <content src="index.html" />
    <access origin="*" />
    <preference name="SplashScreen" value="screen" />
    <preference name="SplashScreenDelay" value="2000" />
</widget>

【问题讨论】:

    标签: android cordova


    【解决方案1】:

    清单:您的插件是否已加载?

    • 您的index.html 是否加载cordova.js 脚本? (即如果您有www/index.html,那么您可以直接引用cordova.js。此文件不在www 目录中,而是由Cordova 自动生成并插入到您的应用中)
    • 插件javascript加载了吗?使用 Chrome 或 Safari 远程调试您的 android/iOS 应用。
    • cordova plugin ls:你的插件上市了吗?
    • plugins/android.json: 你的插件上市了吗?
    • platforms/android/assets/www 是否拥有所有文件? (即带有脚本的plugins 文件夹,cordova_plugins.js 应提及您的插件,特定于平台的cordova.js

    你能听听deviceready 事件来检查Cordova 是否初始化了吗? (如果所有脚本都到位)

    【讨论】:

    • 这家伙是冠军。我看到了很多关于 Cordova 的旧教程,它们令人困惑,因为它们都不同(Cordova 似乎改变了很多结构),我认为 cordova.js 不需要再添加了,因为我找不到它.我认为它会在构建过程中自动添加。最后,事情就是这样。我将cordova.js 添加到我的index.html 中,一切正常!
    • 这对我帮助很大。拉着我的头发试图弄清楚为什么这不起作用!
    • 我有cordova plugin add &lt;plugin&gt;s,但我的cordova plugin ls 空返回,我的插件文件夹是空的。知道为什么吗?
    • 谢谢,我不知道我是如何忽略了包含cordova.js 文件的。如此多的其他科尔多瓦功能似乎运行良好,以至于我被误导认为相机插件特别有问题。
    • 如何检查插件 javascript 是否正常工作?我在 Chrome 上没有收到任何错误,但在 iPhone 模拟器上,cordova 相机插件不起作用。
    【解决方案2】:

    如果您的插件不起作用,您也可以尝试以下步骤:

    cordova plugin list;
    cordova plugin remove my-cordova-plugin --save;
    cordova plugin add my-cordova-plugin --nosave;
    

    还要注意以下插件依赖项:

    1. filefile-transfercamera插件都依赖于compat插件;所以compat 需要最后删除。
    2. file-transfer 插件依赖于file,所以需要先删除file

    【讨论】:

      【解决方案3】:

      今天我了解了导致此问题发生的另一个原因:确保您的项目没有第二个名为 cordova.js 的文件,无论在哪里。如果cordova插件管理发现这样一个文件作为标签包含,它可能会错误地认为你自己文件的基本路径是Cordova的cordova.js的基本路径,并将其用作加载自己的JS文件的基本路径。

      【讨论】:

        猜你喜欢
        • 2014-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-10
        • 1970-01-01
        • 1970-01-01
        • 2019-01-15
        • 1970-01-01
        相关资源
        最近更新 更多