Android 10 @ ioni c -native / file-transfer / file-opener не работает - PullRequest
3 голосов
/ 05 мая 2020

@ ioni c -native / file-transfer / file-opener не работает Я получаю сообщение «Ошибка открытия: EACCES (доступ запрещен)» при попытке загрузить PDF-файл и открыть его в моем ioni c - angular project. Это файлы заголовков и функция для открытия вложения. Это нормально работает в android версии 9, но не в android 10. Какова причина этой проблемы?

Заголовочные файлы

import { FileTransfer, FileTransferObject } from '@ionic-native/file-transfer';
import { File } from '@ionic-native/file';
import { FileOpener } from '@ionic-native/file-opener';
import { PhotoViewer } from '@ionic-native/photo-viewer';

Вызов функции

constructor(public navCtrl: NavController, public navParams: NavParams,
...
private fileTransfer: FileTransfer,
private platform: Platform,
private file: File,
private fileOpener: FileOpener,
private photo: PhotoViewer,
...
) {...}

openAttachment(attachment) {
this.notification.getNotificationCount(this.userID).subscribe(res => this.setNotificationsCountAtStart(res));
this.loader.displayLoader();
const transfer: FileTransferObject = this.fileTransfer.create();
var filename = attachment.substring(attachment.lastIndexOf('/') + 1);
var filePath;
if (this.platform.is('ios')) {
  filePath = this.file.documentsDirectory + filename;
} else if (this.platform.is('android')) {
  filePath = this.file.externalRootDirectory + 'Download/' + filename;
}
if (attachment.indexOf('.pdf') > -1) {
  transfer.download(this.baseurl + attachment, filePath, true).then((entry) => {
    let url = entry.toURL();
    this.fileOpener.open(url, 'application/pdf')
      .then(() => {
        console.log('File is opened');
        this.loader.hideLoader();
      })
      .catch(e => console.log('Error opening file', JSON.stringify(e)))
  }, (error) => {
    // handle error
    let toast = this.toast.create({
      message: JSON.stringify(error),
      duration: 3000,
      position: 'bottom'
    });
    toast.present();
  });
} else if (attachment.indexOf('.png') > -1) {
  transfer.download(this.baseurl + attachment, filePath, true).then(entry => {
    let url = entry.toURL();
    this.loader.hideLoader();
    this.photo.show(url, filename, {});
  })
} else if (attachment.indexOf('.jpg') > -1) {
  transfer.download(this.baseurl + attachment, filePath, true).then(entry => {
    let url = entry.toURL();
    this.loader.hideLoader();
    this.photo.show(url, filename, {});
  })
} else if (attachment.indexOf('.jpeg') > -1) {
  transfer.download(this.baseurl + attachment, filePath, true).then(entry => {
    let url = entry.toURL();
    this.loader.hideLoader();
    this.photo.show(url, filename, {});
  })
} else {
  this.loader.hideLoader();
}
}

1 Ответ

0 голосов
/ 23 июля 2020

Я изменил версию AndroidTargetSDK на 28 в файле AndroidManifest. Теперь он работает. Я запускаю приложение из AndroidStudio. Таким образом, изменение значения на 28 заставляет его работать. Надеюсь, это сработает.

...