Cordova Android相机-提供非法参数异常

u4dcyp6a  于 2022-11-15  发布在  Android
关注(0)|答案(5)|浏览(256)

我开始 cordova Android编程2个月回来。一切都很好,主要是相机,现在不工作。但上周一些如何我的项目目录被删除,我重新安装 cordova 和编译项目的所有插件,但现在它显示错误'非法参数异常'的相机点击令人惊讶的事情是,我没有改变单行代码,它也在其他开发人员的机器上正常工作。
cordova插件添加cordova-plugin-camera命令,用于摄像头插件安装。
camera_app. js文件

var pictureSource; // picture source
var destinationType; // sets the format of returned value

// Wait for device API libraries to load
//
document.addEventListener("deviceready", onDeviceReady, false);

// device APIs are available
//
function onDeviceReady() {
    pictureSource = navigator.camera.PictureSourceType;
    destinationType = navigator.camera.DestinationType;

}

// Called when a photo is successfully retrieved
//
function onPhotoURISuccess(imageURI) {
    // largeImage.src = imageURI;
    console.log(imageURI);
    console.log(document_type);

}

function getPhoto(docType) {
    // Retrieve image file location from specified source
    document_type = docType
    $('.docError').hide();
    navigator.camera.getPicture(onPhotoURISuccess, onFail, {
        quality: 50,
        destinationType: destinationType.FILE_URI
    });
}

$('#file1').click(function() {
    console.log('On camera click');
    getPhoto("addressProof");
});

我试着调试代码最后发现是由于提供者路径-java.lang.IllegalArgumentException:缺少android.support.FILE_PROVIDER_PATHS元数据
但我已经在Android xml文件中添加了提供者路径 meta数据,因为当您添加cordova插件时,它会自动添加。

<provider android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true" android:name="android.support.v4.content.FileProvider">
            <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths" />
        </provider>

cordova 插件-
cordova插件应用程序版本0.1.9“应用程序版本”cordova插件相机2.4.1“相机”cordova插件兼容1.1.0“兼容”cordova插件白名单1.3.2“白名单”cordova sqlite存储1.4.9“Cordova sqlite存储插件”离子插件键盘2.2.1“键盘”
cordova 平台
已安装的平台:Android 6.2.3可用平台:黑莓10 ~3.8.0(已弃用)浏览器~4.1.0 webos ~3.7.0 windows ~5.0.0
NPM版本- { npm:“3.10.3”,战神:“1.10.1-DEV”,http解析器:“2.7.0”,加护病房:'57.1',模块:“48”,节点:“6.4.0”,开放式 ssl :'1.0.2h',紫外线:“1.9.1”,第8版:'5.0.71.60',字符库:“1.2.8”}

vcudknz3

vcudknz31#

这是非常简单和基本的。只需添加您的文件提供程序下面到您的cordova启动器活动。在我的情况下,我有一些自定义活动和错误的提供程序被添加到底部的所有活动,我的猜测是cordova无法读取该提供程序,这就是为什么它是给java.lang.IllegalArgumentException:缺少android.support.FILE_PROVIDER_PATHS元数据

nbnkbykc

nbnkbykc2#

我今天也遇到了类似的问题,什么都试过了(重新安装插件,从源代码重新安装插件,重新安装旧版本的插件),但似乎没有帮助。不知道为什么,但后-杀死模拟器-〉 cordova 清洁Android -〉 cordova 平台删除Android -〉 cordova 平台添加Android -〉 cordova 建立Android -连接我的设备-〉 cordova 运行Android它再次工作像以前一样:-)我仍然不知道为什么。尝试它在你自己的风险。也许它有帮助。

ttcibm8c

ttcibm8c3#

确保你的Android虚拟设备仿真器有一个前后摄像头设置!我也有同样的错误和删除和添加平台不工作。

Sidenote: For the Emulator to work, you need to have him already open and then you could run your Debug APK from Android Studio 3.3 or run `ionic cordova run android`.

有效的方法:打开Android虚拟设备管理器(Android Studio -〉配置-〉AVD管理器)

操作-〉编辑(铅笔图标)

显示进阶设定

确保你确实添加了前后摄像头!之前这个设置是“无”,所以这不起作用,我得到了上面的错误。添加摄像头后,一切正常。
希望这能帮助像我这样的人,他有一个没有摄像头的AVD配置。

gfttwv5a

gfttwv5a4#

有两种方法可以解决此问题。
1.可能与AndroidManifest.xml(Package= / ApplicationId)中的提供程序名称不匹配
1.第二种方式在build.gradle(app)文件中
release {... minifyEnabled false ...}

w6mmgewl

w6mmgewl5#

在“www.example.com“中将applicationId更改为应用程序包ID后,它可以正常工作 CameraLancher.java

public void takePicture(int returnType, int encodingType)
    {
        // Save the number of images currently on disk for later
        this.numPics = queryImgDB(whichContentStore()).getCount();

        // Let's use the intent and see what happens
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

        // Specify file so that large image is captured and returned
        File photo = createCaptureFile(encodingType);
        this.imageFilePath = photo.getAbsolutePath();
        this.imageUri = FileProvider.getUriForFile(cordova.getActivity(),
                "com.package-id" + ".cordova.plugin.camera.provider", ---->> your app package id
                photo);

相关问题