您的位置:首页 > 移动开发 > Android开发

android用户拒绝权限

2016-05-12 16:54 483 查看
------------------------------------------------HNQ-------------------------------------------------------------------

第一次写博客

录音时如何判断android用户是否拒绝了权限,网上找了很多资料没找到,通过研究QQ等应用的处理方式,有了一个不太成熟的方案。

checkpermission什么的就不说了,都是坑。偏偏还有人说可以。

下面是代码:

try {

recorder.setAudioSource(MediaRecorder.AudioSource.MIC);

recorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);

// 格式amr

recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

recorder.setOutputFile(Environment

.getExternalStorageDirectory()

.getAbsolutePath()

+ "/hu8.mp3");

recorder.setAudioSamplingRate(8000);

recorder.setAudioChannels(1);

recorder.prepare();

} catch (IllegalStateException e) {

// TODO Auto-generated catch block

Log.i("代码测试", e.toString() + "prepare");

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

Log.i("代码测试", e.toString() + "prepare2");

e.printStackTrace();

}

recorder.start();

//checkFile(file);

new Thread(new Runnable() {

@Override

public void run() {

// TODO Auto-generated method stub

int flag1=0;

for(int i=0;i<10;i++){

try {

Thread.sleep(200);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

int maxAmplitude = recorder.getMaxAmplitude();

Log.i("maxAmplitude", maxAmplitude+"");

flag1+=maxAmplitude;

}

if(flag1==0){

handler.post(new Runnable() {

public void run() {

recorder.stop();

recorder.reset();

Toast.makeText(MainActivity.this, "未开启权限或者没有录音", Toast.LENGTH_LONG).show();

}

});

}else {

handler.post(new Runnable() {

public void run() {

Toast.makeText(MainActivity.this, "正在录音", Toast.LENGTH_LONG).show();

}

});

}

}

}).start();

随便写的代码不那么规范,原理就是判断麦克风的振幅,通过测试发现。振幅在很短的一段时间获取是0,然后只要开始录音,就算处于很安静的环境,振幅也不可能为0.如果因为没有权限,获取到的值就一直是0.代码中睡眠0.2秒,以及for循环都是为了保证可靠。这个数值当然可以修改的,具体怎么样合适需要测试。因为开始录音的时候振幅在很短的一段时间是0,就是为了排除这个干扰才有那个for循环的。至于这个时间是多少 就不清楚了。可能也是个不准确的值吧。用户拒绝权限的问题 困扰了我很久,如果同志们有什么更好的方案,可以交流交流。6.0的权限管理用不上。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: