vivo 사진 촬영 권한

4778 단어 android
일반적으로 사진 촬영 권한(Android6.0 이전)의 여부를 판단하는 방법:
1. Camera를 통해오픈() 후 판단camera==null?
2. 일부 휴대전화는 사진 촬영 권한을 금지하고 얻은 카마라도 null(예를 들어 매족)이 되지 않는다. 이때 카마라를 포획할 수 있다.getParameters()에서 발생한 이상을 판단합니다.
    public static boolean isCameraCanUse() {
        boolean canUse = true;
        Camera mCamera = null;
        try {
            mCamera = Camera.open();
            // setParameters      MX5   。MX5   Camera.open()    Camera
            //     null
            Camera.Parameters mParameters = mCamera.getParameters();
            mCamera.setParameters(mParameters);
        } catch (Exception e) {
            canUse = false;
        }
        if (mCamera != null) {
            mCamera.release();
        }
        return canUse;
    }

3. 그리고 (예를 들어 VIVO) 사진 촬영 권한이 금지된 상황에서camera!=null 그리고camera.getParameters()에서 예외가 발견되지 않았습니다.그러나 권한을 수여하고 금지한 후에 얻은camera를 비교해 보면 mHasPermission의 속성이 권한을 얻었는지 여부를 알 수 있다.하지만 이 속성의 값을 직접 얻을 수는 없습니다.그래서 반사로 얻는 거야.
    private boolean isHasPermission(){
        Field fieldPassword = null;
        try {
            Camera camera = Camera.open();
            fieldPassword = camera.getClass().getDeclaredField("mHasPermission");
            fieldPassword.setAccessible(true);
            return (boolean) fieldPassword.get(camera);
        } catch (Exception e) {
            e.printStackTrace();
            return true;
        }

    }

4. 녹음 권한
/**
     *           
     */
    public static boolean isHasRecordPermission(final Context context){
        //      
        int audioSource = MediaRecorder.AudioSource.MIC;
        //        ,44100      ,          22050,16000,11025
        int sampleRateInHz = 44100;
        //           CHANNEL_IN_STEREO    ,CHANNEL_CONFIGURATION_MONO    
        int channelConfig = AudioFormat.CHANNEL_IN_STEREO;
        //       :PCM 16     。      。PCM 8     。          。
        int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
        //        
        int bufferSizeInBytes = 0;



        bufferSizeInBytes = 0;
        bufferSizeInBytes = AudioRecord.getMinBufferSize(sampleRateInHz,
                channelConfig, audioFormat);
        AudioRecord audioRecord =  new AudioRecord(audioSource, sampleRateInHz,
                channelConfig, audioFormat, bufferSizeInBytes);
        //      
        try{
            //         ,    
            audioRecord.startRecording();
        }catch (IllegalStateException e){
            e.printStackTrace();
        }
        /**
         *                
         */
        if (audioRecord.getRecordingState() != AudioRecord.RECORDSTATE_RECORDING) {
            return false;
        }
        audioRecord.stop();
        audioRecord.release();
        audioRecord = null;

        return true;
    }

좋은 웹페이지 즐겨찾기