背景:
1、Android Q针对录音采用了新的方案:支持共享录音规则。详见官方网站,/about/versions/10/features#sharing-audio-input
2、手机中安装多个录音应用,此处以A和B为代表。
问题:
由于采用了共享规则,在A录音时候,打开应用B进行录音,系统将不会给出警告。我想知道在应用B要录音时候,A应用是否在录音中。
解决方法:
1、在Activity中增加Contex与AudioManager的对象,作为其属性;
private Context mContext;
private AudioManager mAudioManger;
2、获取系统录音服务
mContext = MainActivity.this;
...
mAudioManger = (AudioManager)mContext.getSystemService(mContext.AUDIO_SERVICE);
3、获取是否有其他应用在录音
(要求大于等于API level 24)
mAudioManger.getActiveRecordingConfigurations());
如果为空,则说明上述代码被执行时,没有其他应用在录音。
验证代码:(布局只设置了一个按钮)
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private Context mContext;
private AudioManager mAudioManger;
private Button mButton1;
private Boolean mMicIsBusy = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = MainActivity.this;
mButton1 = findViewById(R.id.button1);
mButton1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mAudioManger = (AudioManager)mContext.getSystemService(mContext.AUDIO_SERVICE);
Log.d(TAG, "onClick: " + mAudioManger.getActiveRecordingConfigurations());
if( mAudioManger.getActiveRecordingConfigurations().isEmpty()){
mMicIsBusy = false;
}else {
mMicIsBusy = true;
}
if(mMicIsBusy){
Toast.makeText(MainActivity.this,"警告:有录音程序在运行!",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MainActivity.this,"没有录音机在运行",Toast.LENGTH_SHORT).show();
}
}
});
}
演示验证视频链接(哔哩哔哩):
联想Z6手机,Android P(Android 9)。由于我还没有Android Q系统手机,先用它来测试一下吧。哈哈哈!
android
感谢:
博主 阿东探世界 的一篇博文
博主 睡着的海豚 的一篇博文