gpt4 book ai didi

Cordova 插件不工作

转载 作者:太空狗 更新时间:2023-10-29 18:31:19 25 4
gpt4 key购买 nike

我正在尝试使用 Cordova 插件:cordova-plugin-filepath

https://www.npmjs.com/package/cordova-plugin-filepath

Corodva/Ionic (Android) 应用程序上。

我正在尝试使用与上述网址相同的代码,我的意思是:

window.FilePath.resolveNativePath('content://...', successCallback, errorCallback);

但是我得到:

  [11:36:22]  typescript: D:/ionic2/test-app/src/pages/home/home.ts, line: 27
Property 'FilePath' does not exist on type 'Window'.

L26: this._camera.getPicture( options ).then(( imageData ) => {
L27: this.cameraUrl = window.FilePath.resolveNativePath(imageData);
L28: this.photoSelected = true;

我是否必须以某种方式导入 window

我正在使用这个插件来转换文件的路径:

content://com.android.providers.media.documents/document/...

到:

/storage/sdcard/...

这是我的环境信息:

Your system information:

Cordova CLI: 6.5.0
Ionic Framework Version: 3.0.1
Ionic CLI Version: 2.2.3
Ionic App Lib Version: 2.2.1
Ionic App Scripts Version: 1.3.0
ios-deploy version: Not installed
ios-sim version: Not installed
OS: Windows 10
Node Version: v6.10.2
Xcode version: Not installed

以防万一,我在这里删除了代码:home.ts:

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { DomSanitizer } from '@angular/platform-browser';
import { Camera } from '@ionic-native/camera';

@Component( {
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {

cameraData: string;
photoTaken: boolean;
cameraUrl: string;
photoSelected: boolean;

constructor( public navCtrl: NavController, private _DomSanitizationService: DomSanitizer, private _camera: Camera ) {
this.photoTaken = false;
}

selectFromGallery() {
var options = {
sourceType: this._camera.PictureSourceType.PHOTOLIBRARY,
destinationType: this._camera.DestinationType.NATIVE_URI
};
this._camera.getPicture( options ).then(( imageData ) => {
this.cameraUrl = window.FilePath.resolveNativePath(imageData);
this.photoSelected = true;
this.photoTaken = false;
}, ( err ) => {
// Handle error
});
}

openCamera() {
var options = {
sourceType: this._camera.PictureSourceType.CAMERA,
destinationType: this._camera.DestinationType.DATA_URL,
correctOrientation: true
};
this._camera.getPicture( options ).then(( imageData ) => {
this.cameraData = 'data:image/jpeg;base64,' + imageData;
this.photoTaken = true;
this.photoSelected = false;
}, ( err ) => {
// Handle error
});
}

}

关于如何使这个插件工作的任何想法?

[编辑 1]

我修改了源码如下:

import { FilePath } from '@ionic-native/file-path';
...
constructor(
public navCtrl: NavController,
private _DomSanitizationService: DomSanitizer,
private _camera: Camera,
private filePath: FilePath
) {
this.photoTaken = false;
}
...
selectFromGallery() {
var options = {
sourceType: this._camera.PictureSourceType.PHOTOLIBRARY,
destinationType: this._camera.DestinationType.NATIVE_URI
};
this._camera.getPicture( options ).then(( imagePath ) => {
this.filePath.resolveNativePath(imagePath).then(filePath => {
this.cameraUrl = filePath;
this.photoSelected = true;
this.photoTaken = false;
});
});
}

还做了:

$ ionic plugin add cordova-plugin-filepath

但现在我得到以下错误:

Runtime Error
Uncaught (in promise): Error: No provider for FilePath! Error at g (http://192.168.1.202:8100/build/polyfills.js:3:7133) at injectionError (http://192.168.1.202:8100/build/main.js:1511:86) at noProviderError (http://192.168.1.202:8100/build/main.js:1549:12) at ReflectiveInjector_._throwOrNull (http://192.168.1.202:8100/build/main.js:3051:19) at ReflectiveInjector_._getByKeyDefault (http://192.168.1.202:8100/build/main.js:3090:25) at ReflectiveInjector_._getByKey (http://192.168.1.202:8100/build/main.js:3022:25) at ReflectiveInjector_.get (http://192.168.1.202:8100/build/main.js:2891:21) at AppModuleInjector.NgModuleInjector.get (http://192.168.1.202:8100/build/main.js:3856:52) at resolveDep (http://192.168.1.202:8100/build/main.js:11260:45) at createClass (http://192.168.1.202:8100/build/main.js:11128:32) at createDirectiveInstance (http://192.168.1.202:8100/build/main.js:10954:37) at createViewNodes (http://192.168.1.202:8100/build/main.js:12303:49) at createRootView (http://192.168.1.202:8100/build/main.js:12208:5) at callWithDebugContext (http://192.168.1.202:8100/build/main.js:13339:42) at Object.debugCreateRootView [as createRootView] (http://192.168.1.202:8100/build/main.js:12800:12)
Stack
Error: Uncaught (in promise): Error: No provider for FilePath!
Error
at g (http://192.168.1.202:8100/build/polyfills.js:3:7133)
at injectionError (http://192.168.1.202:8100/build/main.js:1511:86)
at noProviderError (http://192.168.1.202:8100/build/main.js:1549:12)
at ReflectiveInjector_._throwOrNull (http://192.168.1.202:8100/build/main.js:3051:19)
at ReflectiveInjector_._getByKeyDefault (http://192.168.1.202:8100/build/main.js:3090:25)
at ReflectiveInjector_._getByKey (http://192.168.1.202:8100/build/main.js:3022:25)
at ReflectiveInjector_.get (http://192.168.1.202:8100/build/main.js:2891:21)
at AppModuleInjector.NgModuleInjector.get (http://192.168.1.202:8100/build/main.js:3856:52)
at resolveDep (http://192.168.1.202:8100/build/main.js:11260:45)
at createClass (http://192.168.1.202:8100/build/main.js:11128:32)
at createDirectiveInstance (http://192.168.1.202:8100/build/main.js:10954:37)
at createViewNodes (http://192.168.1.202:8100/build/main.js:12303:49)
at createRootView (http://192.168.1.202:8100/build/main.js:12208:5)
at callWithDebugContext (http://192.168.1.202:8100/build/main.js:13339:42)
at Object.debugCreateRootView [as createRootView] (http://192.168.1.202:8100/build/main.js:12800:12)
at g (http://192.168.1.202:8100/build/polyfills.js:3:7133)
at l (http://192.168.1.202:8100/build/polyfills.js:3:6251)
at http://192.168.1.202:8100/build/polyfills.js:3:6805
at t.invokeTask (http://192.168.1.202:8100/build/polyfills.js:3:15213)
at Object.onInvokeTask (http://192.168.1.202:8100/build/main.js:4415:37)
at t.invokeTask (http://192.168.1.202:8100/build/polyfills.js:3:15134)
at n.runTask (http://192.168.1.202:8100/build/polyfills.js:3:10390)
at a (http://192.168.1.202:8100/build/polyfills.js:3:5313)

[编辑 2]

[EDIT 1] 之上,我做了以下版本:

@Component( {
selector: 'page-home',
templateUrl: 'home.html',
providers: [ FilePath ]
})

这次我没有遇到错误,但图像没有加载。我使用文本区域来查看传递给图像的 src 值是什么。

我还注意到,现在我得到了真正的路径(这很好)。

也许现在是嵌入式 webview 的权限问题。请检查此链接:https://forum.ionicframework.com/t/no-local-image-showing-in-view-on-device/30647

我想我越来越近了。

这是我手机的截图:

enter image description here

[编辑 3]

我在一个真正的 Android 设备上使用这个命令运行:

$ ionic run android -l

最佳答案

首先你应该遵循Ionic2文档中的使用方法,而不是插件文档中的方法。

在这里查看 Ionic2 文档 https://ionicframework.com/docs/native/file-path/

首先导入FilePath

import { FilePath } from '@ionic-native/file-path';

然后将 FilePath 添加到您的构造函数

constructor( 
public navCtrl: NavController,
private _DomSanitizationService: DomSanitizer,
private _camera: Camera,
private filePath: FilePath
) {
this.photoTaken = false;
}

然后在你的代码中像这样使用它:

selectFromGallery() {
var options = {
sourceType: this._camera.PictureSourceType.PHOTOLIBRARY,
destinationType: this._camera.DestinationType.NATIVE_URI
};
this._camera.getPicture( options ).then(( imageData ) => {
//use this.filePath instead of window.FilePath
this.cameraUrl = this.filePath.resolveNativePath(imageData);
this.photoSelected = true;
this.photoTaken = false;
}, ( err ) => {
// Handle error
});
}

编辑:由于海报使用的是 Ionic 3.0.1,因此需要添加提供者,否则将导致 no provider FilePath 错误。

像这样在@Component 中添加提供者:

@Component({
...
providers: [ FilePath ],
...
})

希望对您有所帮助! ^_^

关于 Cordova 插件不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43573951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com