天天看點

react native android6+拍照閃退或重新開機的解決方案

前言

android 6+權限使用的時候需要動态申請,那麼在使用rn的時候要怎麼處理拍照權限問題呢?本文提供的是一攬子rn操作相冊、拍照的解決方案,請看正文的提高班部分。

解決步驟

1、AndroidManifest.xml設定拍照權限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />      

2、配置build.gradle:

設定defaultConfig裡面的targetSdkVersion>=23.

3、在需要使用的地方或者程式啟動之後的首頁面的構造中申請相機權限,代碼如下:

async requestCameraPermission() {
    if (Platform.OS == 'ios') return true;
    //申請相機權限
    try {
        const granted = await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.CAMERA, {
            title: '申請攝像頭權限',
            message: '一個很牛逼的應用想借用你的攝像頭'
        });
        if (granted === PermissionsAndroid.RESULTS.GRANTED) {
            console.log('現在你獲得攝像頭權限了');
            return true;
        } else {
            console.log('使用者并不屌你');
            return false;
        }
    } catch (err) {
        console.warn(err);
        return false;
    }
}      

拍照之前調用上面的方法:

this.requestCameraPermission(); //申請相機權限      

提高班

多圖選擇、圖檔裁剪(支援ad/ios圖檔個數控制)推薦使用react-native-syan-image-picker,使用教程檢視《react-native多圖選擇、圖檔裁剪(支援ad/ios圖檔個數控制)》。

小技巧:react-native-syan-image-picker 版本V0.0.5 安卓6+ 拍照問題有點問題,我已經pull request,作者已經合并,稍後測試問題之後,即可釋出,如果着急使用貼出解決代碼。

1.修改build.gradle如圖:

2、修改RNSyanImagePickerModule.java更新2.1.7配置,代碼如下:

.openGallery(PictureMimeType.ofImage())//全部.PictureMimeType.ofAll()、圖檔.ofImage()、視訊.ofVideo()、音頻.ofAudio()
.maxSelectNum(imageCount)// 最大圖檔選擇數量 int
.minSelectNum(1)// 最小選擇數量 int
.imageSpanCount(4)// 每行顯示個數 int
.selectionMode(modeValue)// 多選 or 單選 PictureConfig.MULTIPLE or PictureConfig.SINGLE
.previewImage(true)// 是否可預覽圖檔 true or false
.previewVideo(false)// 是否可預覽視訊 true or false
.enablePreviewAudio(false) // 是否可播放音頻 true or false
.isCamera(isCamera)// 是否顯示拍照按鈕 true or false
.imageFormat(PictureMimeType.PNG)// 拍照儲存圖檔格式字尾,預設jpeg
.isZoomAnim(true)// 圖檔清單點選 縮放效果 預設true
.sizeMultiplier(0.5f)// glide 加載圖檔大小 0~1之間 如設定 .glideOverride()無效
.enableCrop(isCrop)// 是否裁剪 true or false
.compress(true)// 是否壓縮 true or false
.glideOverride(160, 160)// int glide 加載寬高,越小圖檔清單越流暢,但會影響清單圖檔浏覽的清晰度
.withAspectRatio(CropW, CropH)// int 裁剪比例 如16:9 3:2 3:4 1:1 可自定義
.hideBottomControls(isCrop)// 是否顯示uCrop工具欄,預設不顯示 true or false
.isGif(isGif)// 是否顯示gif圖檔 true or false
.freeStyleCropEnabled(true)// 裁剪框是否可拖拽 true or false
.circleDimmedLayer(showCropCircle)// 是否圓形裁剪 true or false
.showCropFrame(showCropFrame)// 是否顯示裁剪矩形邊框 圓形裁剪時建議設為false   true or false
.showCropGrid(showCropGrid)// 是否顯示裁剪矩形網格 圓形裁剪時建議設為false    true or false
.openClickSound(false)// 是否開啟點選聲音 true or false
.cropCompressQuality(90)// 裁剪壓縮品質 預設90 int
.minimumCompressSize(100)// 小于100kb的圖檔不壓縮 
.synOrAsy(true)//同步true或異步false 壓縮 預設同步
.rotateEnabled(true) // 裁剪是否可旋轉圖檔 true or false
.scaleEnabled(true)// 裁剪是否可放大縮小圖檔 true or false
.videoQuality(0)// 視訊錄制品質 0 or 1 int
.videoMaxSecond(15)// 顯示多少秒以内的視訊or音頻也可适用 int 
.videoMinSecond(10)// 顯示多少秒以内的視訊or音頻也可适用 int 
.recordVideoSecond(60)//視訊秒數錄制 預設60s int
.forResult(PictureConfig.CHOOSE_REQUEST);//結果回調onActivityResult code       

效果如圖:

react native android6+拍照閃退或重新開機的解決方案
react native android6+拍照閃退或重新開機的解決方案

關注下面二維碼,訂閱更多精彩内容。

react native android6+拍照閃退或重新開機的解決方案
react native android6+拍照閃退或重新開機的解決方案
react native android6+拍照閃退或重新開機的解決方案

關注公衆号(加好友):

react native android6+拍照閃退或重新開機的解決方案

作者:

王磊的部落格

出處:

http://vipstone.cnblogs.com/