Android 手机

2017-11-25  本文已影响213人  christian_zs

本文主要介绍 Android 手机系统权限处理方式

前言

随着 Android 设备的广泛引用,Google 对于手机的安全问题也越来越重视 。从 Android M 开始添加了应用动态权限管理,手机的权限管理细粒度,更好的保护了用户的个人隐私并且赋予了用户更大的管理权限。但是各大 Android 手机本身有自己的应用权限管理,这就导致了 Android 开发小伙伴们,在开发工程中要尽可能多的去考虑问题,防止出现权限问题导致应用崩溃。

权限变化及影响

权限变化

影响

解决方案

public boolean isHasAudioRecordingPermission(Context context) {
        isHasPermission = false;
        count = 0;
        mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
                SAMPLE_RATE_IN_HZ, AudioFormat.CHANNEL_IN_DEFAULT,
                AudioFormat.ENCODING_PCM_16BIT, BUFFER_SIZE);
        if (mAudioRecord == null) {
            MyLog.e("sound", "mAudioRecord初始化失败");
        }
        isGetVoiceRun = true;
        try {
            mAudioRecord.startRecording();
            short[] buffer = new short[BUFFER_SIZE];
            while (isGetVoiceRun) {

                count++;

                if (count++ > 10) {
                    isGetVoiceRun = false;
                }
                //r是实际读取的数据长度,一般而言r会小于buffersize
                int r = mAudioRecord.read(buffer, 0, BUFFER_SIZE);
                long v = 0;
                // 将 buffer 内容取出,进行平方和运算
                for (short aBuffer : buffer) {
                    v += aBuffer * aBuffer;
                }
                // 平方和除以数据总长度,得到音量大小。
                double mean = v / (double) r;
                double volume = 10 * Math.log10(mean);
                MyLog.d(TAG, "-------分贝值:" + volume + "----v" + v + "------r" + r);
                if (v > 0 && r > 0) {
                    // 有录音
                    isHasPermission = true;
                    mAudioRecord.stop();
                    mAudioRecord.release();
                    mAudioRecord = null;
                    return isHasPermission;
                }
                // 大概一秒十次
                synchronized (mLock) {
                    try {
                        mLock.wait(5);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
            mAudioRecord.stop();
            mAudioRecord.release();
            mAudioRecord = null;

        } catch (Exception e) {
            e.printStackTrace();
        }
        return isHasPermission;
    }
 switch (Build.MANUFACTURER) {
            case Constants.ROM_HUAWEI: // 华为
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
                comp = new ComponentName("com.huawei.systemmanager",
                        "com.huawei.permissionmanager.ui.MainActivity");
                intent.setComponent(comp);
                startActivity(intent);
                break;
            case Constants.ROM_MEIZU: // 魅族
                intent.setAction("com.meizu.safe.security.SHOW_APPSEC");
                intent.addCategory(Intent.CATEGORY_DEFAULT);
                intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
                startActivity(intent);
                break;
            case Constants.ROM_XIAOMI: // 小米
                intent.setAction("miui.intent.action.APP_PERM_EDITOR");
                intent.setClassName("com.miui.securitycenter",
                        "com.miui.permcenter.permissions.PermissionsEditorActivity");
                intent.putExtra("extra_pkgname", getPackageName());
                startActivity(intent);
                break;
            case Constants.ROM_SONY: // 索尼
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
                comp = new ComponentName("com.sonymobile.cta",
                        "com.sonymobile.cta.SomcCTAMainActivity");
                intent.setComponent(comp);
                startActivity(intent);
                break;
            case Constants.ROM_OPPO: // oppo
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
                comp = new ComponentName("com.color.safecenter",
                        "com.color.safecenter.permission.PermissionManagerActivity");
                intent.setComponent(comp);
                startActivity(intent);
                break;
            case Constants.ROM_LG: // LG
                intent.setAction("android.intent.action.MAIN");
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
                comp = new ComponentName("com.android.settings",
                        "com.android.settings.Settings$AccessLockSummaryActivity");
                intent.setComponent(comp);
                startActivity(intent);
                break;
            case Constants.ROM_LETV: // 乐视
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
                comp = new ComponentName("com.letv.android.letvsafe", "com.letv.android.letvsafe.PermissionAndApps");
                intent.setComponent(comp);
                startActivity(intent);
                break;
            default:
                // 跳转权限设置界面
                intent.setAction(Settings.ACTION_SETTINGS);
                startActivity(intent);
                break;
        }
上一篇 下一篇

猜你喜欢

热点阅读