科尔多瓦插件不工作 [英] Cordova plugins not working

查看:229
本文介绍了科尔多瓦插件不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

编辑澄清:<名称> 你在下面的一些文件看是不是真正的文件的一部分,但它包括我必须审查公司名称

测试情况:

  • 在科尔多瓦4
  • 在OS X优胜美地
  • 在Android 4.4系统的设备(加上USB)
  • 在使用终端;不蚀

会发生什么情况: 使用科尔多瓦运行--release 成功生成并签署.apk文件和移动设备安装并打开它没有问题。但是,没有任何插件的工作。例如:

  title.on('点击',函数(){
        如果(!navigator.camera){
            警报(没有摄像头!');
        } 其他 {
            navigator.camera.getPicture(函数成功(数据){
            // 做一点事
            },功能错误(数据){});
        }
    });
 

总是提醒,没有摄像头,这意味着科尔多瓦没有一个相机对象添加到 window.navigator 对象。

下面是我的科尔多瓦安装和一些XML文件的一些信息,据我可以告诉什么期待的地方。需要注意的是它不只是不工作,我只是用它作为一个例子摄像头。

科尔多瓦信息:

 节点版本:v0.10.29

科尔多瓦版本:4.0.1-nightly.2014.9.29

config.xml文件:

< XML版本=1.0编码=UTF-8&GT?;
<微件ID =COM<名称> .APP。版本=0.0.1的xmlns =htt​​p://www.w3.org/ns/widgets的xmlns:CDV =HTTP://科尔多瓦。 apache.org/ns/1.0">
    <名称><名称>迷你< /名称>
    <描述>
        德<名称>应用程序VOOR济telefoon
    < /描述>
    <作者电子邮件=斯蒂芬@<名称> .NL的href =htt​​ps://开头<名称> .NL>
        HET<名称>球队
    < /笔者>
    <内容SRC =的index.html/>
    <获得原产地=*/>
    < preference名=闪屏的价值=屏幕/>
    < preference名=SplashScreenDelay值=2000/>
< /部件>


插件:

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平台:

可用的Andr​​oid的目标:
----------
ID:1或机器人-19
     产品名称:安卓4.4.2
     类型:平台
     API等级:19
     修订:4
     皮肤:HVGA,QVGA,WQVGA400,WQVGA432,WSVGA,WVGA800(默认),WVGA854,WXGA720,WXGA800,WXGA800-7in
 标签/ ABI的:默认/ armeabi-V7A,默认/ 86
 

科尔多瓦/ config.xml中

 < XML版本=1.0编码=UTF-8&GT?;
<微件ID =COM<名称> .APP。版本=0.0.1的xmlns =htt​​p://www.w3.org/ns/widgets的xmlns:CDV =HTTP://科尔多瓦。 apache.org/ns/1.0">
    <名称><名称>迷你< /名称>
    <描述>
        德<名称>应用程序VOOR济telefoon
    < /描述>
    <作者电子邮件=斯蒂芬@<名称> .NL的href =htt​​ps://开头<名称> .NL>
        HET<名称>球队
    < /笔者>
    <内容SRC =的index.html/>
    <获得原产地=*/>
    < preference名=闪屏的价值=屏幕/>
    < preference名=SplashScreenDelay值=2000/>
< /部件>
 

科尔多瓦/平台/安卓/ AndroidManifest.xml中 <

  XML版本=1.0编码=UTF-8&GT?;
<舱单安卓hardwareAccelerated =真的Andr​​oid版本:版本code =1机器人:VERSIONNAME =0.0.1包=com.kaartje2go.App的xmlns:机器人=HTTP://模式。 android.com/apk/res/android">
    <支持屏安卓anyDensity =真正的机器人:largeScreens =真正的机器人:normalScreens =真正的机器人:调整大小=真正的机器人:smallScreens =真正的机器人:xlargeScreens =真/>
    <使用-权限的Andr​​oid:名称=android.permission.INTERNET对/>
    <应用的Andr​​oid版本:hardwareAccelerated =真正的机器人:图标=@可绘制/图标机器人:标签=@字符串/ APP_NAME>
        <活动机器人:configChanges =定位| keyboardHidden |键盘|屏幕尺寸|语言环境机器人:标签=@字符串/ ACTIVITY_NAME机器人:launchMode =singleTop机器人:NAME =CordovaApp安卓主题=@机器人:款式/ Theme.Black.NoTitleBar机器人:windowSoftInputMode =adjustResize>
            <意图过滤器的Andr​​oid版本:标签=@字符串/ launcher_name>
                <作用机器人:名称=android.intent.action.MAIN/>
                <类机器人:名称=android.intent.category.LAUNCHER/>
            &所述; /意图滤光器>
        < /活性GT;
    < /用途>
    <使用-SDK安卓的minSdkVersion =10机器人:targetSdkVersion =19/>
    <使用-权限的Andr​​oid:名称=android.permission.WRITE_EXTERNAL_STORAG​​E/>
    <使用-权限的Andr​​oid:名称=android.permission.RECORD_AUDIO/>
    <使用-权限的Andr​​oid:名称=android.permission.MODIFY_AUDIO_SETTINGS/>
    <使用-权限的Andr​​oid:名称=android.permission.READ_PHONE_STATE/>
    <使用-权限的Andr​​oid:名称=android.permission.RECORD_VIDEO/>
    <使用-权限的Andr​​oid:名称=android.permission.VIBRATE/>
< /舱单>
 

科尔多瓦/平台/安卓/ RES / XML / config.xml中

 < XML版本=1.0编码=UTF-8&GT?;
<微件ID =COM<名称> .APP。版本=0.0.1的xmlns =htt​​p://www.w3.org/ns/widgets的xmlns:CDV =HTTP://科尔多瓦。 apache.org/ns/1.0">
    < preference名=日志级别值=DEBUG/>
    <功能名称=相机>
        < PARAM NAME =Android的包值=org.apache.cordova.camera.CameraLauncher/>
    < /功能>
    <功能名称=通知>
        < PARAM NAME =Android的包值=org.apache.cordova.dialogs.Notification/>
    < /功能>
    <功能名称=文件>
        < PARAM NAME =Android的包值=org.apache.cordova.file.FileUtils/>
        < PARAM NAME =的onload值=真/>
    < /功能>
    <功能名称=文件传输>
        < PARAM NAME =Android的包值=org.apache.cordova.filetransfer.FileTransfer/>
    < /功能>
    <功能名称=媒体>
        < PARAM NAME =Android的包值=org.apache.cordova.media.AudioHandler/>
    < /功能>
    <功能名称=捕捉>
        < PARAM NAME =Android的包值=org.apache.cordova.mediacapture.Capture/>
    < /功能>
    <功能名称=闪屏>
        < PARAM NAME =Android的包值=org.apache.cordova.splashscreen.SplashScreen/>
    < /功能>
    <功能名称=振动>
        < PARAM NAME =Android的包值=org.apache.cordova.vibration.Vibration/>
    < /功能>
    <名称><名称>迷你< /名称>
    <描述>
        德<名称>应用程序VOOR济telefoon
    < /描述>
    <作者电子邮件=斯蒂芬@<名称> .NL的href =htt​​ps://开头<名称> .NL>
        HET<名称>球队
    < /笔者>
    <内容SRC =的index.html/>
    <获得原产地=*/>
    < preference名=闪屏的价值=屏幕/>
    < preference名=SplashScreenDelay值=2000/>
< /部件>
 

解决方案

清单:?是你的插件加载

  • index.html的加载 cordova.js 脚本? (也就是说,如果你有 WWW / index.html的那么你可以参考 cordova.js ,这个文件是不是在在 WWW 目录,但自动生成的科尔多瓦在你的应用程序插入)
  • 是插件的JavaScript加载?使用Chrome或Safari浏览器远程调试你的android / iOS的应用程序。
  • 科尔多瓦插件LS :?是您的插件列
  • 插件/ android.json :?是您的插件列
  • 确实平台/安卓/资产/ WWW 拥有的所有文件? (即插件文件夹中的脚本, cordova_plugins.js 应提及你的插件,特定于平台的 cordova.js

您可以收听 deviceready 事件,以检查是否科尔多瓦初始化呢? (如果所有的脚本到位)

Edit for clarification: The <name> you see in some of the files below is not actually part of the files, but it includes the company name which I had to censor.

Test situation:

  • Cordova 4
  • OS X Yosemite
  • Android 4.4 device (coupled with USB)
  • Using Terminal; not Eclipse

What happens: Using cordova run --release successfully builds and signs the .apk and the mobile device installs and opens it without issues. But, none of the plugins work. For example:

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

Always alerts that there is no camera, which means Cordova did not add a camera object to the window.navigator object.

Below is some information about my cordova installation and some xml files, as far as I can tell nothing looks out of place. Note that it is not just the camera that does not work, I just used it as an example.

Cordova info:

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>

解决方案

Checklist: Is your plugin loaded?

  • Does your index.html load the cordova.js script? (i.e. if you have www/index.html then you can just reference cordova.js. This file is not in the www directory, but automatically generated by Cordova and inserted in your app)
  • Is the plugin javascript loaded? Use Chrome or Safari to remote debug your android/iOS app.
  • cordova plugin ls: Is your plugin listed?
  • plugins/android.json: Is your plugin listed?
  • Does platforms/android/assets/www have all files? (i.e. a plugins folder with scripts, cordova_plugins.js should mention your plugin, a platform-specific cordova.js)

Can you listen to the deviceready event to check if Cordova initializes at all? (If all scripts are in place)

这篇关于科尔多瓦插件不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆