小米,紅米手機android 6.0以下 許可權管理
阿新 • • 發佈:2019-02-03
紅米小米等手機在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; } }