ionic1 下载pdf文件并打开

问题描述:下载文档pdf
解决步骤:
① 安装好ionic开发环境
② 安装相关插件
版本信息:cordova plugin add cordova-plugin-app-version 0.1.9
文件管理:cordova plugin add cordova-plugin-file 5.0.0
文件传输:cordova plugin add cordova-plugin-file-transfer 1.7.1
打开文件:cordova plugin add cordova-plugin-file-opener2 2.0.19
权限插件:cordova pluign add cordova-plugin-android-permissions 1.0.0
安装权限插件主要是因为Android8.0以上的版本有权限限制。
③相关代码:app.js
权限代码:
允许读写权限,打开之后可以下载并且打开pdf

function userDate(url, targetPath){
    var permissions = cordova.plugins.permissions;
    permissions.hasPermission(permissions.READ_EXTERNAL_STORAGE, checkPermissionCallback, null);
    function checkPermissionCallback(status) {
            if (!status.hasPermission) {
                var errorCallback = function() {
                    console.log('Storage permission is not turned on');
                }
                permissions.requestPermission(
                    permissions.READ_EXTERNAL_STORAGE,
                    function(status) {
                        if (!status.hasPermission) {
                            errorCallback();
                        } else {
                            // download_app();
                            download_app(url, targetPath)
                        }
                    },
                    errorCallback);
            }else{
              download_app(url, targetPath)
            }
        }
}

相关controller.js代码

$scope.open = function(){
//点击下载通过请求查看到pdf位置
   $http.get('http://172.168.10.7:3000/api/v2/test_v2')
   .then(function (result) {
     var link = 'http://'+result.data.code
     console.log(link)
     check(link,"file:///storage/emulated/0/download/1234.pdf")
// check参数1 下载路经
//参数2 下载之后保存在手机上的名称
      },function(e){
     console.log(err)
   })
  }
//查看手机中是否有此文件,没有创建,有直接下载替换
  function check(url, targetPath) {
      $cordovaFile.checkDir("file:///storage/emulated/0/", "download").then(function (success) {
          download_app(url, targetPath);
      }, function (error) {
          // 不存在则创建
          $log.error('check dataDirectory');
          $cordovaFile.createDir("file:///storage/emulated/0/", "download", false)
              .then(function (success) {
                  // success
                  download_app(url, targetPath);
              }, function (error) {
                  // error
              });

      });
  }
  
  function download_app(url, targetPath){
     $ionicLoading.show({
        template: "正在下载"
     });
      $cordovaFileTransfer.download(url, targetPath, {}, true).then(function (result) {
          // Success!
          $ionicLoading.hide();
          $cordovaToast.showShortCenter('下载完成');
          //   下载完成之后直接打开
          $cordovaFileOpener2.open(
              targetPath,
              'application/pdf'
          ).then(function () {
              $cordovaToast.showShortCenter('打开');
          }, function (e) {
                alert('Error status: ' + e.status + ' - Error message: ' + e.message)
          });

      }, function (err) {
          $ionicLoading.show({
              template: "下载失败"
          });
          $ionicLoading.hide();
      }, function (progress) {
          var downloadProgress = (progress.loaded / progress.total) * 100;
          if (downloadProgress > 99) {
              $ionicLoading.hide();
          }
      });
    }

Config.xml中 platform name =”android”下

<config-file parent="/manifest" target="AndroidManifest.xml" xmlns:android="http://schemas.android.com/apk/res/android">
            <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
        </config-file>

注:bug
a. 安装插件之后,对应的ionic1版本的话,安装之后会造成不能打包,需要在安装插件时 file插件对应版本号安装,添加Android平台时需要cordova platform add android@6.3.0,
此时需要查看平台是否添加完整。
b. 为了解决权限问题,添加权限之后需要在AndroidMifeat
固定版本号

<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="26"/>

权限查看

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.INSTALL_LOCATION_PROVIDER"/>
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>

c. 如果build时遇到transform…错 在Android平台下build.gradle

configurations.all {
 resolutionStrategy {
 force 'com.android.support:support-v4:27.1.0'
}
}

def promptForReleaseKeyPassword()之前添加

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值