在上一篇文章中,提到了如何在ionic1中使用imagepicker插件,并且实现该插件显示中文(汉化)问题
有兴趣可以看看:ionic1使用ImagePicker插件并且显示中文(汉化)

1、这次要解决的问题是app在一些手机上打开相册时,莫名闪退问题。
在上一篇文章中我们这样使用imagepicker插件。通过连接手机联调后,可以查看相关的错误原因error

    $scope.openImagePicker= () => {
        const options = {
            maximumImagesCount: 11, // 允许一次选中的最多照片数量
            width: 800,    // 筛选宽度
            height: 600,    //筛选高度
            quality: 100    //图像质量的大小,默认为100
          };
          
      $cordovaImagePicker.getPictures(options)
        .then(results => {
          console.log("选中的照片返回一个照片地址数组,可以直接在html中绑定");
          $scope.imgList = results;
        }, error => {
          console.log(error);
          console.log("打开照片失败");
        });
     };

2、知道原因就好解决了,在手机设置中把这个app的相关权限开启,然后在打开相册。ok,没有闪退,运行正常。但是我们当然没法让用户这么做,所以还是要从想办法解决获取权限问题

3、解决闪退方法
3.1 重新下载一个插件,可以更换一个插件

cordova plugin remove cordova-plugin-image-picker // 先移除原来的插件
cordova plugin add https://github.com/Findiglay/cordova-imagePicker.git  // 在添加新的插件

已经做过权限获取处理,这里就不在废话,想了解可以去github查看

3.2 使用获取权限的插件cordova-plugin-android-permissions
cordova plugin add cordova-plugin-android-permissions // 安装插件

在js中

angular.module("app").run(["$rootScope", "i18n", "$ionicPlatform",
  function ($rootScope, $ionicPlatform) {
    "use strict";

    function checkPermissions() {
      const permissions = cordova.plugins.permissions,
        permissionList = [permissions.CAMERA, permissions.WRITE_EXTERNAL_STORAGE];
      function errorCallback() {
        console.warn("permissions is not turned on");
      }
      function checkPermissionCallback(status) {
        if(!status.hasPermission) {
          permissions.requestPermissions(
            permissionList,
            status => {
              if(!status.hasPermission) errorCallback();
            },
            errorCallback);
        }
      }
      permissions.hasPermission(permissionList, checkPermissionCallback, null);
    }


    ionic.Platform.ready(() => {
      try {
        $ionicPlatform.is("Android") && checkPermissions();
      } catch (e) {
        console.warn("Application is running in browser causes inspection failed.");
      }
    }); 
}]);

这样在app环境准备好后,回去访问相册权限, 和存储权限,如果没有开启,则询问用户,只要用户开启权限就可以了。这样就能在android 6以上的手机使用imagepicker

参考: ionic cordova相册插件和监听Android返回键


嘉恩Gavin
98 声望5 粉丝

[链接]