新笔记


1. Android 6.0 运行时权限的介绍
在保护用户隐私方面:Android6.0为了更好的保护个人隐私,添加了运行时权限:分为两类,一类是Normal Permissions,这类权限不涉及个人隐私,不需要用户进行授权,比如手机震动,访问网络;一类是Dangerous Permissions,这类权限涉及个人隐私,需要用户进行授权,比如读取SD卡,访问通讯录等。
在用户操作方面:当执行敏感操作之前弹出对话框,请求权限,可以拒绝,可以同意;可以在设置页面对APP的权限进行查看,以及对单个权限进行授权或者解除授权。
2. 为什么需要配置运行时权限及解决办法
为什么:
  • 直接原因:
当我们把targetSdkVersion设置为大于22的版本后,如果我们申请危险权限的时候,谷歌就会强制我们使用动态申请,否则会报错。
  • 根本原因:保护个人隐私,提高安全性
在6.0之前,权限会在显示在安装页面,告知APP访问哪些权限,如果你同意它访问这些权限,就可以安装,如果不同意就不能安装这款APP.因此好多App存在着滥用权限的情况,不管你用不用得到,先把权限申请了再说。举例说明:微信要读取手机里面的短信和彩信,这是不认可的,但是如果你不同意这项权限,你是无法安装这款App的;
在6.0之后,用户不需要在安装软件的时候一次性授权所有申请的权限,而是可以在软件的使用过程中再对某一项权限申请进行授权。举例说明:一款相机应用在运行时申请了地理位置定位权限,就算我拒绝了这个权限,我仍然可以使用这款应用的其他功能,不用像6.0之前无法安装它。
解决办法:
  • 投机取巧
如果我们不想使用6.0或者7.0的新特性,那么我们把targetSdkVersion设置22,就可以很好的避开动态配置运行时权限。而targetSdkVersion设置为22,并不影响其在Android 6.0或7.机制上使用,因为高版本兼容低版本。
  • 光明大道
配置运行时权限。
3. 正常权限和危险权限罗列:
Normal Permissions:
WRITE_SYNC_SETTINGS 写同步设置WAKE_LOCK 唤醒锁VIBRATE 颤动 USE FINGERPRINT 使用指纹UNINSTALL_SHORTCUT 卸载快捷方式TRANSMIT_IR 红外传输SET_WALLPAPER_HINTS 壁纸设置提示SET_WALLPAPER 设置壁纸SET_TIME_ZONE 设置时区SET_ALARM 设置闹钟REQUEST_INSTALL_PACKAGES 请求安装包REORDER_TASKS 重新排序的任务RECEIVE_BOOT_COMPLETED 收到启动完成READ_SYNC_STATS 读同步数据NFCMODIFY_AUDIO_SETTINGS 修改音频设置KILL_BACKGROUND_PROCESSES 杀死后台进程INTERNET 网络INSTALL_SHORTCUT 安装快捷方式GET PACKAGE SIZE 得到包的大小EXPAND_STATUS_BAR 扩大状态栏DISABLE_KEYGUARD 禁用键盘守卫CHANGE_WIFI_STATE 更改无限网络状态CHANGE_WIFI_MULTICAST_STATE 改变无限多播状态CHANGE_NETWORK_STATE 改变网络状态BROADCAST_STICKY 粘性广播BLUETOOTH_ADMIN 蓝牙管理BLUETOOTH 蓝牙技术ACCESS_WIFI_STATE 访问无限网络状态ACCESS_NOTIFICATION_POLICY 访问通知策略ACCESS_NETWORK_STATE 访问网络状态ACCESS_LOCATION_EXTRA_COMMANDS 访问地点额外的命令
Dangerous Permissions(9组24个):
group:android .permission -group .CONTACTS 通讯录方面 permission:android .permission.WRITE _CONTACTS 写入通讯录 permission:android .permission.GET _ACCOUNTS 访问通讯录权限 permission:android .permission.READ _CONTACTS 读取通讯录group:android .permission -group .PHONE 电话方面 permission:android .permission.READ _CALL_LOG 看电话记录 permission:android .permission.READ _PHONE_STATE 读取手机状态 permission:android .permission.CALL _PHONE 打电话 permission:android .permission.WRITE _CALL_LOG 编写调用日志 permission:android .permission.USE _SIP 使用SIP permission:android .permission.PROCESS _OUTGOING_CALLS 过程输出调用 permission: com .android.voicemail.permission.ADD _VOICEMAIL 添加语音信箱group:android .permission -group .CALENDAR 日历 permission:android .permission.READ _CALENDAR 读取日历 permission:android .permission.WRITE _CALENDAR 写入日历 group:android .permission -group .CAMERA 照相机 permission:android .permission.CAMERA group:android .permission -group .SENSORS 传感器 permission:android .permission.BODY _SENSORS 体传感器group:android .permission -group .LOCATION 位置 permission:android .permission.ACCESS _FINE_LOCATION 获取好位置 permission:android .permission.ACCESS _COARSE_LOCATION 获取粗定位group:android .permission -group .STORAGE 存储 permission:android .permission.READ _EXTERNAL_STORAGE 读取外部存储器 permission:android .permission.WRITE _EXTERNAL_STORAGE 写外部存储器group:android .permission -group .MICROPHONE 扩音器;麦克风 permission:android .permission.RECORD _AUDIO 录音group:android .permission -group .SMS 信息 permission:android .permission.READ _SMS 读取信息 permission:android .permission.RECEIVE _WAP_PUSH 收到WAP推送 permission:android .permission.RECEIVE _MMS 接收彩信 permission:android .permission.RECEIVE _SMS 收信息 permission:android .permission.SEND _SMS 发信息 permission:android .permission.READ _CELL_BROADCASTS 读细胞广播

注意:你不需要了解每个权限的作用,只要把它当成一个参照表来查看就行了。在申请权限的时候,来查下,如果在危险权限里面,那就配置运行时权限,如果不在就在注册文件里面添加一下权限声明就可以了。
4. Android 6.0的运行时权限的授权机制:
Android 权限都是分组的,所以授权机制会因此受到影响,授权机制如下:
  • 当申请某个危险权限的时候,如果用户在手机后台已经对分组内的其他危险权限进行了授权,那么系统会立即授权该权限(需要申请的),不会让用户进行点击授权,比如app后台已经授权READ_EXTERNAL_STORAGE (读取外部存储器),当你申请WRITE_EXTERNAL_STORAGE (写外部存储器)的时候,系统会立即授权,不会再让点击授权。
  • 需要点击申请危险权限的时候,弹出对话框,这个对话框是不可以定制的;对话框的文本说明,是对整个组的权限说明,而非某一项的。
  • 不要对权限组过多的依赖,尽量对每一个我先权限都进行申请。
5. 在程序运行时申请权限
  • 创建活动MainActivity和布局activity_main:
<Buttonandroid:id= "@+id/bt_call" android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:text= "拨打电话" />
  • 点击拨打电话(这个时候就需要申请拨打电话的权限——–)
@Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button bt_call = (Button) findViewById(R.id.bt_call); bt_call.setOnClickListener( this );} @Override public void onClick(View view) { if (ContextCompat.checkSelfPermission(MainActivity. this , Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(MainActivity. this , new String[]{Manifest.permission.CALL_PHONE}, 1 ); } else { call(); }} private void call() { /*为了防止崩溃,我们用异常捕获代码块捕获异常,startActivity(intent)报错,让添加安全权限**/ try { Intent intent = new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse( "tel:10086" )); startActivity(intent); } catch (SecurityException e) { e.printStackTrace(); }} @Override public void onRequestPermissionsResult( int requestCode, @NonNull String[] permissions, @NonNull int [] grantResults) { switch (requestCode) { case 1 : if (grantResults.length > 0 && grantResults[ 0 ] == PackageManager.PERMISSION_GRANTED) { call(); } else { Toast.makeText( this , "你拒绝了这个权限" , Toast.LENGTH_SHORT).show(); } break ; default : }}

6.0 运动时权限封装




二维码 实现大全
library下载



zxing 开发api文档

logger日志工具的使用

butterknife 工具使用


第一步(工程里的buildgradle)

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

项目中的 buildgradle
  • apply plugin: 'android-apt'
//butterknife注解框架
compile 'com.jakewharton:butterknife:8.2.1'
apt 'com.jakewharton:butterknife-compiler:8.2.1'
主类里面初始化









Anroid6.0权限问题 apk22之后Android把一些涉及用户个人信息的权限都做了默认没有权限处理,需要用户确认才可以: 用户不需要在安装软件的时候一次性授权所有申请的权限,而是可以在软件的使用过程中再对某一项权限申请进行授权。举例说明:一款相机应用在运行时申请了地理位置定位权限,就算我拒绝了这个权限,我仍然可以使用这款应用的其他功能,不用像6.0之前无法安装它。 解决办法: ● 投机取巧 如果我们不想使用6.0或者7.0的特性,那么我们把targetSdkVersion设置22,就可以很好的避开动态配置运行时权限。而targetSdkVersion设置为22,并不影响其在Android 6.0或7.机制上使用,因为高版本兼容低版本。 解决办法:(简单到没朋友) AndroidAcp ● Acp 为 Android check permission 缩写,此库简化Android 6.0 系统复杂的权限操作而编写。 特点 ● 支持批量权限申请,不需要重写 onRequestPermissionsResult 方法,Activity 与 Fragment 中用法一致,一句话搞定。 ● 处理权限拒绝,或勾选不再询问,导致不能正常使用功能的提示框,支持跳转设置权限界面开启权限,所有提示框文字可自定义。 ● #使用Gradle构建时添加一下依赖即可: compile 'com.mylhyl:acp:1.1.7' 怎麽用? Acp.getInstance(this).request(new AcpOptions.Builder() .setPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE , Manifest.permission.READ_PHONE_STATE , Manifest.permission.SEND_SMS) /*以下为自定义提示语、按钮文字 .setDeniedMessage() .setDeniedCloseBtn() .setDeniedSettingBtn() .setRationalMessage() .setRationalBtn()*/ .build(), new AcpListener() { @Override public void onGranted() { writeSD(); getIMEI(); } @Override public void onDenied(List permissions) { makeText(permissions.toString() + "权限拒绝"); } }); ***************************** 二維碼的使用: ZXING ● 可打开默认二维码扫描页面 ● 支持对图片Bitmap的扫描功能 ● 支持对UI的定制化操作 ● 支持对条形码的扫描功能 ● 支持生成二维码操作 ● 支持控制闪光灯开关 ● 集成默认的二维码扫描页面 在具体介绍该扫描库之前我们先看一下其具体的使用方式,看看是不是几行代码就可以集成二维码扫描的功能。 ● 在module的build.gradle中执行compile操作 compile 'cn.yipianfengye.android:zxing-library:2.1' ● 1 ● 1 ● 在Application中执行初始化操作 @Override public void onCreate() { super.onCreate(); ZXingLibrary.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值