Android 6.0 ,7.0 ,8.0 ,9.0版本
android 6.0 :
1.运行时权限
2. 增加低电耗模式和应用待机模式
3. 取消支持 Apache HTTP 客户端
4. 移除硬件标识符访问权
5. WLAN 和网络连接变更
6. 相机服务变更
ps: 相机权限:
1.在Manifest中声明所需权限:
<uses-permission android:name="android.permission.CAMERA"/>2.调用ContextCompat.checkSelfPermission()检查权限:checkSelfPermission()方法接受两个参数。第一个参数为Context对象,第二个参数为需要进行检查的权限,类型为String。返回值是一个int常量,返回PackageManager.PERMISSION_GRANTED表示权限已经被授予,返回PackageManager.PERMISSION_DENIED表示权限未被授予。if(ContextCompat.checkSelfPermission(this,Manifest.permission.CAMERA)!= PackageManager.PERMISSION_GRANTED) {//权限未授予,调用requestPermission()申请权限}else{//权限已授予}3.如果权限未被授予,调用ActivityCompat.requestPermissions()申请权限:
requestPermissions()接受三个参数,第一个参数是Context对象,第二个参数是一个String数组,可以同时申请多个权限,第三个参数是请求码。ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CAMERA}, MY_REQUEST_CODE);4.重写Activity的onRequestPermissionsResult()处理申请回调:@Override
public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {switch (requestCode) {case MY_REQUEST_CODE: {if (grantResults.length > 0 &&grantResults[0] == PackageManager.PERMISSION_GRANTED) {//用户允许该权限} else {//用户拒绝该权限}return;}}
}
其中requestCode就是请求码,在这里就是上面的MY_REQUEST_CODE,permissions就是申请的权限,grantResults是请求的结果,数组大小与permissions对应。由于我们只请求了一个CAMERA权限,所以只需要看grantResults的第一个值就好了,根据结果做出相应的操作
比较好用的封装库RxPermission。
android 7.0
1:私有文件访问权限更改
2:多窗口支持(分屏显示)
3:通知增强功能
4:随时随地低电耗模式
5:多语言区域支持,更多语言
6:新增的表情符号
7:Chrome 和 WebView 配合使用
8:APK signature scheme v2
私有文件:
如果尝试传递 file:// Uri来访问其他应用的私有文件会触发 FileUriExposedException异常,分享私有文件内容的推荐方法是使用 FileProvider,FileProvider是v4包下的一个类,继承自ContentProvider。所以可以猜测通过FileProvider对外公开的uri就是content://开头的。
拍照后的文件
在 res/xml 目录下新建一个 xml 文件,用于存放应用需要共享的文件目录,这里我命名为file_paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android"><external-files-pathname="my_images"path="./images/"/>
</paths>
name是自定义的一个别名,path是这个共享的目录,这里的path值表示共享外部私有目录file/images下的文件。如果是输入的是"."则表示共享外部私有目录下的file/目录下的所有文件。
其中元素有以下几个子节点:
:内部存储空间应用私有目录下的 files/ 目录,等同于 Context.getFilesDir() 所获取的目录路径
:内部存储空间应用私有目录下的 cache/ 目录,同于 Context.getCacheDir() 所获取的目录路径;
:外部存储空间根目录,等同于 Environment.getExternalStorageDirectory() 所获取的目录路径;
外部存储空间应用私有目录下的 files/ 目录,等同于 Context.getExternalFilesDir(null) 所获取的目录路径;
:外部存储空间应用私有目录下的 cache/ 目录,等同于 Context.getExternalCacheDir();
.在AndroidManifest中声明FileProvide:
<providerandroid:name="android.support.v4.content.FileProvider"android:authorities="${applicationId}.FileProvider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths" /></provider>
authorities的名字可自定义,一般为包名+FileProvide,resource就是刚刚新建的共享文件
android 8.0 :
(1):通知渠道
(2):启动图标
(3):统一的布局外边距和内边距
(4):自动填充框架
(5):画中画模式
(6):多显示器支持
(7):媒体增强功能
通知渠道:
.创建通知渠道
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {NotificationChannel newsChannel = new NotificationChannel(CHANNEL_NEWS, "新闻",NotificationManager.IMPORTANCE_HIGH);NotificationChannel adsChannel = new NotificationChannel(CHANNEL_ADS, "广告",NotificationManager.IMPORTANCE_DEFAULT);NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);manager.createNotificationChannel(newsChannel);manager.createNotificationChannel(adsChannel);}
NotificationChannel对象就代表着一个通知渠道,构造方法接受三个参数,第一个参数是全局唯一的渠道id,String类型。第二个是渠道名称,注意这个名称给用户看的。第三个是通知的重要等级。这里我们调用createNotificationChannel()创建了两个渠道,新闻和广告。注意:通知渠道不会重复创建,创建过程可以放在Application中进行。运行上面的代码后,渠道就创建好了
public void sendNews(View view) {NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);Notification notification = new NotificationCompat.Builder(this, CHANNEL_NEWS).setContentTitle("法国获得2018世界杯冠军").setContentText("法国夺冠克罗地亚虽败犹荣比利时季军").setAutoCancel(true).build();manager.notify(1, notification);}public void sendAds(View view) {NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);Notification notification = new NotificationCompat.Builder(this, CHANNEL_ADS).setContentTitle("收到某新闻来自拼多多的广告").setContentText("这是它的广告内容...").setAutoCancel(true).build();manager.notify(1, notification);}public void sendNoChannel(View view) {NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);Notification notification = new NotificationCompat.Builder(this).setContentTitle("没有渠道的通知").setContentText("通内容").setAutoCancel(true).setSmallIcon(R.mipmap.ic_launcher).build();manager.notify(1, notification);}
作者:养生阿华田
来源:CSDN
原文:https://blog.csdn.net/weixin_38261570/article/details/81046352
版权声明:本文为博主原创文章,转载请附上博文链接!
android 9.0 :
App Actions
这个特性推荐使用AI进行操作。AI会尝试找出你接下来要做什么,以及你接下来需要什么,当你启动app抽屉时,它会告诉你。根据你的当前地理位置、一天中的某个时间段,甚至是你连接耳机的时候,向你推荐一些东西。还有位于应用程序抽屉中的快捷键可以预测你将要做什么,这样你就可以更快地完成你在手机上要做的事情。例如,如果你通常打开应用程序面板,然后打开手机应用程序,然后给你的好朋友打电话。在Android Pie上,你最终会看到打开这个应用程序后,就开始建议你给好友电话。
New gesture navigation(新的手势导航栏)
Manual rotation(手动旋转)
Security and privacy features(安全和隐私特性)
9.0 可参考 连接https://blog.csdn.net/hejjunlin/article/details/81489690
作者:逆流的鱼yuiop
来源:CSDN
原文:https://blog.csdn.net/hejjunlin/article/details/81489690
版权声明:本文为博主原创文章,转载请附上博文链接!
Android 6.0 ,7.0 ,8.0 ,9.0版本相关推荐
- Android 异常: failed to connect to localhost/127.0.0.1
Android 异常: failed to connect to localhost/127.0.0.1 参考文章: (1)Android 异常: failed to connect to local ...
- 【错误记录】Android Studio 4.2.1 编译报错 ( Kotlin 版本推荐设置 1.5.0 )
文章目录 一.报错信息 二.解决方案 一.报错信息 将 Android Studio 版本升级成最新的 4.2.14.2.14.2.1 版本 , 出现如下错误 ; Build file 'D:\pro ...
- 关于Android studio3.0的坑之butterknife 7.0.1(低版本)
关于Android studio3.0的坑之butterknife 7.0.1(低版本) 我们在AS3.0里面是无法直接使用butterknife 内库插件的,会报错,如下图: 接下来看看怎么设置呢? ...
- Android 集成支付宝支付,支付宝支付2.0
成功起调支付宝支付 下载支付sdk复制到libs文件夹下并add as library:https://docs.open.alipay.com/54/104509 1.首先申请支付宝 企业账户 ...
- Android 系统(268)---native保活5.0以下方案推演过程以及代码详述
Android 进程常驻(3)----native保活5.0以下方案推演过程以及代码详述 这是一个轻量级的库,配置几行代码,就可以实现在android上实现进程常驻,也就是在系统强杀下,以及360获取 ...
- Android 8.0 学习 (26)---Android8.0 Power Menu 添加截屏选项
首先介绍下这个Power长按,显示Power Menu的流程,然后再介绍如何去添加一个新的选项,新的选项的功能是截屏. Power Menu长按的流程: 1.长按Power的处理在framework ...
- Android 8.0 学习(24)---Android8.0 WiFi热点适配
Android8.0 WiFi热点适配 在Android8.0上用以前的方式调试WiFi热点的时候发现无法正常开启热点,于是查了下,发现之前的热点打开接口已经废弃.原先的接口WifiManager.j ...
- Android8.0 学习 (17)Android国际化(多语言)实现,支持8.0
Android国际化(多语言)实现,支持8.0 前言 最近因为项目中使用了国际化,所以正好研究了下实现方法: 首先说下项目需求: 可以随着系统切换语言而切换语言,不支持的语言显示默认 用户可以选择语言 ...
- Android UI开发第四十一篇——墨迹天气3.0引导界面及动画实现
周末升级了墨迹天气,看着引导界面做的不错,模仿一下,可能与原作者的代码实现不一样,但是实现的效果还是差不多的.先分享一篇以前的文章,android动画的基础知识,<Android UI开发第十二 ...
- Android Camera API 2使用OpenGL ES 2.0和GLSurfaceView对预览进行实时二次处理(黑白滤镜)
这段时间有点忙,一直没时间写第三篇教程,其实代码很早之前就写好了.本系列教程会有三篇文章讲解Android平台滤镜的实现方式,希望在阅读本文之前先阅读前面两篇文档. 第一篇 Android Camer ...
最新文章
- RAID类型及软RAID的组建
- Dask.distributed创建client时出现报错
- Kafka 0.10.0文档翻译二
- Linux 文件 目录
- “出题老师”超全划重点,赛场高分必备干货!
- MS Expression Web中的Asp.net mvc(和其他网络编辑工具)
- 管理结果集和分析结果集
- Spring面试基础题
- 南京大学计算机学院冯新宇导师,中国科学技术大学计算机科学与技术专业硕士研究生导师冯新宇...
- 字符串的数组形式与指针形式
- 5.3LNA的拓扑结构
- 不存在有效_文水2单位存在安全隐患!
- JVM内存管理及垃圾回收机制
- L44.linux命令每日一练 -- 第七章 Linux用户管理及用户信息查询命令 -- su和visudo
- 2G、 3G、 4G、5G的区别
- 五笔打字 五笔练习 86编码 字根 五笔字典 拆字 图解
- reactos操作系统实现(6)
- postman批量发送请求小记
- 数据库——完整性约束条件
- mysql中双引号和单引号有什么区别