1. 程式人生 > >小米,紅米手機android 6.0以下 許可權管理

小米,紅米手機android 6.0以下 許可權管理

紅米小米等手機在android6.0以下加了許可權管理,用android自身帶的checkpermisson方法時,永遠返回true,因此在獲取許可權為true時,加入判斷

錄音許可權:

 Log.e("MainActivity", "onPermissionGranted");
                    if (PermissionHelper.isAudioEnable()) {
                        Toast.makeText(MainActivity.this, "開始錄音操作", Toast.LENGTH_LONG).show();
                    } else {
                        DialogUtil.showPermissionManagerDialog(MainActivity.this, "錄音或麥克風");
                    }

幫助類:

package com.andsync.xpermissionutils.util;

import android.content.Context;
import android.hardware.Camera;
import android.location.LocationManager;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;

/**
 * 可能會有用的一些方法
 *
 * @author AndSync
 * @date 2017/10/30
 * Copyright © 2014-2017 AndSync All rights reserved.
 */
public class PermissionHelper {
    /**
     * 6.0以下判斷是否開啟錄音許可權
     */
    public static boolean isAudioEnable() {
        boolean isValid = true;
        AudioRecord mRecorder;
        int bufferSize =
            AudioRecord.getMinBufferSize(8000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
        short[] mBuffer = new short[bufferSize];
        mRecorder = new AudioRecord(MediaRecorder.AudioSource.MIC, 8000, AudioFormat.CHANNEL_IN_MONO,
            AudioFormat.ENCODING_PCM_16BIT, bufferSize);
        //開始錄製音訊
        try {
            // 防止某些手機崩潰,例如聯想
            mRecorder.startRecording();
        } catch (IllegalStateException e) {
            e.printStackTrace();
            isValid = false;
            return isValid;
        } finally {
            // TODO
        }
        int readSize = mRecorder.read(mBuffer, 0, mBuffer.length);
        if (AudioRecord.ERROR_INVALID_OPERATION != readSize) {
            // 做正常的錄音處理
        } else {
            //錄音可能被禁用了,做出適當的提示
            isValid = false;
        }
        // 停止錄製
        try {
            // 防止某些手機崩潰,例如聯想
            if (mRecorder != null) {
                // 停止
                mRecorder.stop();
                mRecorder.release();
            }
        } catch (IllegalStateException e) {
            e.printStackTrace();
        }
        return isValid;
    }

    /**
     * 6.0以下判斷是否開啟相機許可權
     */
    public static boolean isCameraEnable() {
        boolean isCanUse = true;
        Camera mCamera = null;
        try {
            mCamera = Camera.open();
            //針對魅族手機
            Camera.Parameters mParameters = mCamera.getParameters();
            mCamera.setParameters(mParameters);
        } catch (Exception e) {
            isCanUse = false;
        }

        if (mCamera != null) {
            try {
                mCamera.release();
            } catch (Exception e) {
                e.printStackTrace();
                return isCanUse;
            }
        }
        return isCanUse;
    }

    /**
     * 手機是否開啟位置服務,如果沒有開啟那麼所有app將不能使用定位功能
     */
    public static boolean isLocServiceEnable(Context context) {
        LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
        if (gps || network) {
            return true;
        }
        return false;
    }
}