2

私はcordova-plugin-cameraをプロジェクトに使用してギャラリーから選択しました。Windows 10 Mobile - ギャラリーから選択するとアプリケーションがクラッシュする

AndroidアプリとiOSアプリには何の問題もありません。しかし、現実のWindows 10 Mobileデバイスでテストすると、ギャラリーから画像を選択するとアプリケーションがクラッシュします。

カメラは動作します。何が実行される前に

私が使用するコードは(簡体字)が

this.camera.getPicture({ 
    quality: 50, 
    destinationType: this.camera.DestinationType.FILE_URI, 
    sourceType: this.camera.PictureSourceType.PHOTOLIBRARY, 
    encodingType: this.camera.EncodingType.JPEG, 
    mediaType: this.camera.MediaType.PICTURE, 
    saveToPhotoAlbum: false,   //gave problems in Windows 
    correctOrientation: true 
}).then(imageURI => { 
    this.navCtrl.push(Page2, {image: imageURI}); 
}, err => { 
    // ionic alert, way of still showing alerts to Windows users 
    this.alertCtrl.create({message: err}).present(); 
}); 

そして、私は持っているのPage2コンポーネントで

、通常imageURIを示すだろうアラートが渡されました。

成功もエラーコールバックも実行されません。アプリはただ終了します。

try-catchを追加しようとしましたが、エラーが発生しないようです。 (少なくともキャッチはそれをキャッチしません)

+0

<input type="file" hidden #file (change)="fileChanged()"></input> <button (click)="file.click()">My custom button</button> 

とFileInputクラスから(dataURIなど)SRCを読むために? https://github.com/apache/cordova-plugin-camera#windows-quirks –

+0

@surajはい、それはWP8とWP8.1です。私はそれを引き起こしていたものを見つけ出し、今日後で答えを書くだろう。 Windowsユニバーサルに必要な回避策はWP8(.1)と同じですが、別の問題です – Ivaro18

答えて

0

Windowsユニバーサルアプリケーションでは、Cordovaアプリケーションを構築するときにフォトライブラリにアクセスすることはできません(少なくとも、方法はまだわかりません)。ファイルの読み取り/書き込みアクセスが原因です。 (あなたのデスクトップにWindows 10のアプリケーションを開いて、あなたの写真がすべてあなたのために並んでいることを想像してみてください)、素晴らしいアイデアはありません。

問題を回避するには、ファイル入力を使用してボタンのクリックでトリガすることです(UIは変更されません)。このようにして、ユーザーは彼/彼女自身のためにファイルを選択し、そのファイルへの読み取り/書き込みアクセス権をアプリケーションに提供します。

HTMLは少し次のようになります。あなたがこれを確認しました

fileChange(event) { 
    // show loading screen, this is not very fast on UWP 
    let loading = this.loadingCtrl.create({ 
     content: 'Processing photo...' 
    }); 
    loading.present(); 

    let fileList: FileList = event.target.files; 
    if(fileList.length > 0) { 
     let file: File = fileList[0]; 
     var reader = new FileReader(); 

     // define callback seperate from onload, else e.target.result is undefined 
     let callback = (e) => { 
     loading.dismiss(); 
     let src = e.target.result; 
     }; 

     reader.onload = callback; 

     reader.readAsDataURL(event.target.files[0]); 
    } 
    } 
関連する問題