码迷,mamicode.com
首页 > 其他好文 > 详细

如何检测AudioRecord是否被第三方管理应用给禁用了,附上demo

时间:2016-05-13 03:38:13      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

问题描述

我们在平时在开发中可能会遇到,申请的<uses-permission android:name=”android.permission.RECORD_AUDIO”/>被第三方给禁用了,如被小米的自带的“安全中心”给禁用了,这时该如何检测AudioRecord是否被第三方管理应用给禁用了呢?

网上有很多方案,如

方法一:

MediaRecorder可以给prepare和start方法加try catch判断是否获得了录音权限。但是这招在AudioRecord上却不起效,并不会抛异常。

方法二:

public boolean checkRecordAudioPermission(){
    PackageManager pm = getPackageManager();  
    boolean permission = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.RECORD_AUDIO", "packageName"));
    return permission;
}

但是你会发现返回的结果永远都是true。貌似这只能判断Manifest是否有注册权限,而不能判断权限是否被系统禁用了。

方法..:

Context.checkSelfPermission( permission_name)等等
但最终都不能解决问题

终极解决方案

根据分贝值判断当前应用的录音权限是否被第三方应用禁止了
项目地址详见[https://github.com/Z644912187/RecordAudioPermissionDetect ]
- 说明:
RecordAudioPermissionDetect关键的类
- 使用:

public class MainActivity extends AppCompatActivity implements RecordAudioPermissionDetect.onPermitRecordListener {

    private static final String TAG = "MainActivity";
    private RecordAudioPermissionDetect mRecordAudioPermissionDetect;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        mRecordAudioPermissionDetect = new RecordAudioPermissionDetect(this);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                mRecordAudioPermissionDetect.startCheckRecordPermission();
            }
        });

    }

    @Override
    protected void onResume() {
        super.onResume();
        mRecordAudioPermissionDetect.startCheckRecordPermission();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mRecordAudioPermissionDetect.stopCheck();
    }

    @Override
    public void isPermit(boolean flag) {
        if (!flag) {
            mRecordAudioPermissionDetect.showMissingPermissionDialog(this);
        } else {
            //TODO 注意 重新调用自己的录音操作
        }
    }
}

注意:

我们在使用的过程中,由于一台设备的麦克风资源只有一个,因此主要在isPermit方法中重新调用自己的录音操作。

如何检测AudioRecord是否被第三方管理应用给禁用了,附上demo

标签:

原文地址:http://blog.csdn.net/charles_zhuyifei/article/details/51338267

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!