8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

苦逼的加班生活终于要告一段落了,可以闲下来做一下最近工作中遇到的一些问题和相对应的解决方案。此篇文章主要用来记录Android6.0的权限管理。

权限介绍

Android从6.0(API23)之后开始出现动态权限的管理(Run),虽然对用户来说是个不错的安全体验(控制客户端对系统隐私信息的访问),却加大了我们程序员的工作量,新的权限获取方式除了和之前一样需要在AndroidMainfest文件中静态申请外,还需要在使用的地方动态的去先用户请求授权。当然这些权限也可以再系统设置的应用管理处手动的打开和关闭。当然,并不是所有的权限都需要动态的获取,安卓系统权限分为两类,正常权限和危险权限。

正常权限

正常权限不会给用户的隐私带来风险,直接在AndroidMainfest中静态申请即可(例如网络权限),安装时系统会自动授权。这类权限包括:

android.permission.ACCESS_LOCATION_EXTRA_COMMANDS
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_NOTIFICATION_POLICY
android.permission.ACCESS_WIFI_STATE
android.permission.ACCESS_WIMAX_STATE
android.permission.BLUETOOTH
android.permission.BLUETOOTH_ADMIN
android.permission.BROADCAST_STICKY
android.permission.CHANGE_NETWORK_STATE
android.permission.CHANGE_WIFI_MULTICAST_STATE
android.permission.CHANGE_WIFI_STATE
android.permission.CHANGE_WIMAX_STATE
android.permission.DISABLE_KEYGUARD
android.permission.EXPAND_STATUS_BAR
android.permission.FLASHLIGHT
android.permission.GET_ACCOUNTS
android.permission.GET_PACKAGE_SIZE
android.permission.INTERNET
android.permission.KILL_BACKGROUND_PROCESSES
android.permission.MODIFY_AUDIO_SETTINGS
android.permission.NFC
android.permission.READ_SYNC_SETTINGS
android.permission.READ_SYNC_STATS
android.permission.RECEIVE_BOOT_COMPLETED
android.permission.REORDER_TASKS
android.permission.REQUEST_INSTALL_PACKAGES
android.permission.SET_TIME_ZONE
android.permission.SET_WALLPAPER
android.permission.SET_WALLPAPER_HINTS
android.permission.SUBSCRIBED_FEEDS_READ
android.permission.TRANSMIT_IR
android.permission.USE_FINGERPRINT
android.permission.VIBRATE
android.permission.WAKE_LOCK
android.permission.WRITE_SYNC_SETTINGS
com.android.alarm.permission.SET_ALARM
com.android.launcher.permission.INSTALL_SHORTCUT
com.android.launcher.permission.UNINSTALL_SHORTCUT

危险权限

危险权限会授予应用机密数据的权限,如果在应用运行时需要申请危险权限,则必须用户明确统一使用这些权限后才能进行先关操作。例如:能够读取用户的联系人属于危险权限。如果应用声明其需要危险权限,则用户必须明确明确向用户授予其权限。同一权限组下的权限,用户只要同意其中一种,同组其他权限也相应获取到。

检查权限

如果您的应用需要危险权限,则每次执行需要这一权限的操作时,都需要先检查自己是否具有该权限。用户始终可以自由调用该权限,因此即使用户上次同意了使用该权限,下次也不能默认仍有该权限。

要检查应用是否有该权限,需要调用 ContextCompat.checkSelfPermission() 方法。例如:下面这段代码用来检测Activity是否拥有调用相机的权限。

// Assume thisActivity is the current activity
int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.CAMERA);

如果应用已有此权限,则会返回PackageManager.PERMISSION_GRANTED,并且应用可以继续操作。如果应用不具有此权限,方法将返回 PERMISSION_DENIED,且应用必须明确向用户要求权限。

请求需要的权限

上一步我们进行了权限的检查,如果当前应用尚未授权该权限,则需要调用一个 requestPermissions()) 方法,以请求适当的权限。此方法是异步执行方法。

if (ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.READ_CONTACTS)) {
//用户引导操作
} else {
//权限申请
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
}
}

确认权限回调

此步用来判断用户是否确认了权限onRequestPermissionResult ()@Override

public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
// 如果结果为空,则用户取消授权
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 权限申请成功,进行下一步操作
} else {
// 权限申请失败,展示相关提示
}
return;
}
}
}

第三方工具库

结语

这就是通过6.0之后版本的权限的相关总结,不管你懂没懂,这个工作在日后的开发工作中无可避免,不过如果只是简单的使用,只需要引入第三方工具库即可以非常便利的处理这类问题。