ionic工程引入cordova plugin camera 插件编译报错问题总结

本文介绍了解决Cordova相机插件cordova-plugin-camera在Ionic项目中遇到的问题,包括编译错误和相机调用失败的情况,并给出了具体的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于ionic项目要用到拍照和相册选择的功能,首先就想到了要用到cordova-plugin-camera这个插件,上网搜了一下这个插件的用法,贴两个比较好的文章:

插件用法demo:http://www.cnblogs.com/BetterMyself/p/7117133.html
中文API文档:http://blog.youkuaiyun.com/michael_ouyang/article/details/75085648?fps=1&locationNum=2

按照上诉所有步骤做好后,将ionic工程编译导入eclipse中进行编译和调试。(原始的安卓工程导入会有报错,要添加一个jar包;在AndroidManifest.xml文件中把#{applicaton_id}替换成项目的packagename;project.properties文件中设置打包时的编译器版本)

然后问题来了,仍然有报错,在说明有哪些问题和怎么解决之前,先说下我的ionic开发环境:

Cordova CLI: 5.3.1
Ionic CLI Version: 2.1.13
Ionic App Lib Version: 2.1.7
ios-deploy version: Not installed
ios-sim version: Not installed
OS: Windows 7
Node Version: v4.2.2
Xcode version: Not installed

首先,第一个问题就是项目报错,报错文件为:src/org/apache/cordova/camera/CordovaUri.java,报错代码为:

public Uri getCorrectUri()
    {
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
            return androidUri;
        else
            return fileUri;
    }

Build.VERSION_CODES.M这句报错,这个是工程开发环境的安卓sdk包版本的原因,报错的版本是api22(android 5.1.1),在项目设置中改成api23(android 6.0)就好了,然后把工程的targetSdkVersion改为23(AndroidManifest.xml和project.properties文件都要改),改完后,这个错误就消失了。

弄完这就可以连接真机调试了,调试的时候发现,在调用相机的时候调用不成功,运行报错了,空指针错误。跟进代码调试…
最后发现是src/org/apache/cordova/camera/CordovaUri.java中142行的this.applicationId获取到的为空导致的错误,具体获取的代码为:

this.applicationId = (String) BuildHelper.getBuildConfigValue(cordova.getActivity(), "APPLICATION_ID");
this.applicationId = preferences.getString("applicationId", this.applicationId);

怀疑是不是在项目导入eclipse的时候在AndroidManifest.xml文件把#{application_id}替换成了包名的缘故。据说在Android_studio中可以识别#{application_id},还没亲身试过。
解决办法是把这两行注释掉,替换成:

this.applicationId = cordova.getActivity().getPackageName();

重新编译调试,调用相机成功!

注:第二个问题在国外网站发现有类似的,是在cordova-plugin-camera插件从2.1.1升级到2.3.1之后出现的问题,大神们给的解决办法有的是升级cordova-plugin-compat插件,因为原始的获取this.applicationId的方法是要基于这个插件的;但是我项目中这个插件已经是最新的了,最后通过修改camera插件源码解决的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值