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的权限管理用不上。。。
第一次写博客
录音时如何判断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的权限管理用不上。。。
相关文章推荐
- android MediaCodec的自己碰到的问题
- 关于android 系统sdk自带的解压包zip的坑
- android studio gradle打包
- android框架学习之Volley
- Android Studio混淆代码
- asm.jar 安卓手机屏幕在电脑上显示
- Android Studio集成极光推送(Jpush) 报错 java.lang.UnsatisfiedLinkError: cn.jpush.android.service.PushProtoco
- 开篇介绍和工程目录结构-(从零开始搭建android框架系列(1))
- Android自定义实现开关按钮代码
- android-support-multidex解决Dex 文件方法数超过65536
- Android基础——3.布局&Logcat
- Android dex分包方案
- Android 多线程的基本使用
- Android Bitmap 基础学习
- Android 自动广告轮播图
- Android studio 百度地图开发(9)只显示网格不显示地图或者只显示一个部分地图
- android TextView 复制粘贴
- Android—对话框
- Android 内功心法(1.9)——java设计模式之装饰模式
- Android 5.X新特性之为RecyclerView添加下拉刷新和上拉加载及SwipeRefreshLayout实现原理