2023年6月27日发(作者:)
android各个版本特性⼀:介绍我们可以看到Android版本对应的Api版本⼆:Android 6.0Google I/O 2015⼤会如约已于2015年5⽉28⽇举⾏。在发布会上代号为“Marshmallow(棉花糖)”的安卓6.0系统正式推出。Android 6.0 的API级别:23新特性:1.运⾏时权限(最主要)此版本引⼊了⼀种新的权限模式,⽤户可直接在运⾏时管理应⽤权限。对于以 Android 6.0(API 级别 23)或更⾼版本为⽬标平台的应⽤,请务必在运⾏时检查和请求权限。要确定您的应⽤是否已被授予权限,请调⽤新增的 checkSelfPermission() ⽅法。要请求权限,请调⽤新增的 requestPermissions() ⽅法。即使您的应⽤并不以Android 6.0(API 级别 23)为⽬标平台,您也应该在新权限模式下测试您的应⽤。2.取消⽀持Apache HTTP客户端Android 6.0版本移除了对Apache HTTP客户端的⽀持。如果您的应⽤使⽤该客户端,并以 Android 2.3(API 级别 9)或更⾼版本为⽬标平台,请改⽤ HttpURLConnection 类。此 API 效率更⾼,因为它可以通过透明压缩和响应缓存减少⽹络使⽤,并可最⼤限度降低耗电量。要继续使⽤ Apache HTTP API,您必须先在 ⽂件中声明以下编译时依赖项:android { useLibrary ''//使⽤Apache库}三:Android 7.0Android 7.0是Google推出的智能⼿机操作系统,官⽅代号为“Nougat”(⽜轧糖)。于2016年5⽉18-20⽇(美国西部时间)在Google I/O开发者⼤会上正式发布,发布地点是⼭景城的Shoreline Ampitheatre圆形剧场Android 7.0 包括旨在延长设备电池寿命和减少 RAM 使⽤的系统⾏为变更。这些变更可能会影响您的应⽤访问系统资源,以及您的应⽤通过特定隐式 intent 与其他应⽤交互的⽅式。新特性:1.低电耗模式Android 6.0引⼊了低电耗模式,当⽤户设备未插接电源,处于静⽌状态且屏幕关闭时,该模式会推迟 CPU 和⽹络活动,从⽽延长电池寿命。⽽ Android 7.0 则通过在设备未插接电源且屏幕关闭状态下、但不⼀定要处于静⽌状态(例如⽤户外出时把⼿持式设备装在⼝袋⾥)时应⽤部分 CPU 和⽹络限制,进⼀步增强了低电耗模式。2.系统权限的更改为了提⾼私有⽂件的安全性,⾯向 Android 7.0 或更⾼版本的应⽤私有⽬录被限制访问 (0700)。此设置可防⽌私有⽂件的元数据泄漏,如它们的⼤⼩或存在性。此权限更改有多重副作⽤传递软件包⽹域外的 file:// URI 可能给接收器留下⽆法访问的路径。因此,尝试传递 file:// URI 会触发 FileUriExposedException。分享私有⽂件内容的推荐⽅法是使⽤ FileProvider。Android7.0之前访问系统相册 File file = new File(ernalStorageDirectory(), "/temp/" + tTimeMillis() + ".jpg"); if (!entFile().exists()) entFile().mkdirs(); Uri imageUri = le(file); Intent intent = new Intent();//设置Action为拍照 ion(_IMAGE_CAPTURE);//将拍取的照⽚保存到指定URI ra(_OUTPUT, imageUri); startActivityForResult(intent, 1);在7.0之后的话访问相册会报如下错误:iExposedException: file:///storage/emulated/0/temp/ exposed beyond app ()在Android7.0系统上,Android 框架强制执⾏了 StrictMode API 政策禁⽌向你的应⽤外公开 file:// URI。 如果⼀项包含⽂件 file://URI类型 的 Intent 离开你的应⽤,应⽤失败,并出现 FileUriExposedException 异常,如调⽤系统相机拍照,或裁切照⽚。解决⽅法:第⼀步:在清单⽂件中注册provider
//结果 : content://ovider/Camera/temp/
最简单的以打开相机为例: File file = new File(ernalStorageDirectory(), "/temp/" + tTimeMillis() + ".jpg"); Intent intent = new Intent(_IMAGE_CAPTURE); if (_INT >= 24) { gs(_GRANT_READ_URI_PERMISSION); //24以上使⽤FileProvider ra(_OUTPUT, ForFile(, "ovider", file)); }else{ //24以下 ra(_OUTPUT, le(file)); } startActivityForResult(intent, 1);1、将之前Uri的scheme类型为file的Uri改成了有FileProvider创建⼀个content类型的Uri。2、添加了gs(_GRANT_READ_URI_PERMISSION);来对⽬标应⽤临时授权该Uri所代表的⽂件。四:Android 8.02017年8⽉22⽇,⾕歌正式发布了Android 8.0的正式版,其正式名称为:Android Oreo(奥利奥) 。2017年12⽉5⽇⾕歌正式发布了Android 8.1的正式版。新特性:1.通知渠道 — Notification Channels通知渠道是由应⽤⾃⾏定义的通知内容类别,借助渠道,开发者可以让⽤户对不同种类的通知进⾏精细控制,⽤户可以单独拦截或更改每个渠道的⾏为,⽽不是统⼀管理应⽤的所有通知。创建通知渠道的步骤:创建 NotificationChannel 对象,并设置应⽤内唯⼀的通知 ID。配置通知渠道的属性,⽐如提⽰声⾳等。在 NotificationManager 中注册通知渠道对象。
2、画中画模式 — PIPAndroid O 现已⽀持 Activity 的画中画模式。PIP 是⼀种多窗⼝显⽰模式,多⽤于视频播放。这和普通的画中画分屏模式并不相同。这⼀功能的唤醒只需要点击Home键按钮,如果想结束这⼀模式,可以将⼩窗⼝滑下来以终⽌。关于⽣命周期PIP 模式不会改变 Activity 的⽣命周期。在指定时间只有最近与⽤户交互过的 Activity 为活动状态。 该 Activity 将被视为顶级Activity。 所有其他 Activity 虽然可见,但均处于暂停状态。当⼀个 Activity 处于 PIP 模式时,其实它是出在暂停状态,但其内容会继续展⽰。API变更在 Android O 中新增 PictureInPictureArgs 对象来指明你的 Activity 在 PIP 模式中的属性,⽐如长宽⽐等。Android O 还新增了以下⽅法来⽀持 PIP。ictureInPictureMode(PictureInPictureArgs args):将Activity置于 PIP 模式之下。tureInPictureArgs():⽤于更新 Activity 在 PIP 模式下的设置。如果 Activity 正处于 PIP 模式之下,那么更改的属性将⽴即⽣效。五:Android 9.0Android 9.0是⾕歌研发的移动端操作系统,开发代号为“Pie”(派),于2018年8⽉7⽇正式发布1.利⽤wifi RTT 进⾏室内定位Android 9 添加了对 IEEE 802.11mc Wi-Fi 协议(也称为 Wi-Fi Round-Trip-Time (RTT))的平台⽀持,从⽽让您的应⽤可以利⽤室内定位功能。在运⾏ Android 9 且具有硬件⽀持的设备上,应⽤可以使⽤ RTT API 来测量与附近⽀持 RTT 的 Wi-Fi 接⼊点 (AP) 的距离。 设备必须已启⽤位置服务并开启 Wi-Fi 扫描(在 Settings > Location 下),同时您的应⽤必须具有 ACCESS_FINE_LOCATION 权限。设备⽆需连接到接⼊点即可使⽤ RTT。 为了保护隐私,只有⼿机可以确定与接⼊点的距离;接⼊点⽆此信息。如果您的设备测量与 3 个或更多接⼊点的距离,您可以使⽤⼀个多点定位算法来预估与这些测量值最相符的设备位置。 结果通常精准⾄ 1⾄ 2 ⽶。 通过这种精确性,您可以打造新的体验,例如楼内导航、基于精细位置的服务,如⽆歧义语⾳控制(例如,“打开这盏灯”),以及基于位置的信息(如 “此产品是否有特别优惠?”)。2.显⽰屏缺⼝⽀持Android 9 ⽀持最新的全⾯屏,其中包含为摄像头和扬声器预留空间的屏幕缺⼝。 通过 DisplayCutout 类可确定⾮功能区域的位置和形状,这些区域不应显⽰内容。 要确定这些屏幕缺⼝区域是否存在及其位置,请使⽤ getDisplayCutout() 函数。全新的窗⼝布局属性 layoutInDisplayCutoutMode 让您的应⽤可以为设备屏幕缺⼝周围的内容进⾏布局。 您可以将此属性设为下列值之⼀:LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULTLAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGESLAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER可以按以下⽅法在任何运⾏ Android 9 的设备或模拟器上模拟屏幕缺⼝:启⽤开发者选项。在 Developer options 屏幕中,向下滚动⾄ Drawing 部分并选择 Simulate a display with a cutout。选择屏幕缺⼝的⼤⼩。注:我们建议您通过使⽤运⾏ Android 9 的设备或模拟器测试屏幕缺⼝周围的内容显⽰。3.前台服务如果应⽤以 Android 9 或更⾼版本为⽬标平台并使⽤前台服务,则必须请求 FOREGROUND_SERVICE 权限。这是普通权限,因此,系统会⾃动为请求权限的应⽤授予此权限。如果以 Android 9 或更⾼版本为⽬标平台的应⽤尝试创建前台服务且未请求 FOREGROUND_SERVICE,则系统会抛出SecurityException。public class FloatPasswordWindowService extends Service { @Override public void onCreate() { te();
} @Nullable @Override public IBinder onBind(Intent intent) { LogUtils.d("FloatWindowService:onBind"); return null; }
@Override public int onStartCommand(Intent intent, int flags, int startId) { Log.d(TAG, "onStartCommand()"); // 参数⼀:唯⼀的通知标识;参数⼆:通知消息。startForeground(110, notification);// 开始前台服务 } @Overridepublic void onDestroy() { Log.d(TAG, "onDestroy()"); stopForeground(true);// 停⽌前台服务--参数:表⽰是否移除之前的通知 roy();}}9.0 要求创建⼀个前台服务需要请求 FOREGROUND_SERVICE 权限,否则系统会引发 SecurityException。Intent intentService = new Intent(this, );if (_INT >= N_CODES.O) { startForegroundService(intentService);//开启前台服务} else { startService(intentService);}PS:表忘记中添加FOREGROUND_SERVICE权限//9.0这个前台服务权限不要忘了
/*** 得到进程名称* @param context* @return*/public static String getProcessName(Context context) { try { if (context == null)
return null; ActivityManager manager = (ActivityManager) temService(TY_SERVICE); for (gAppProcessInfo processInfo :
ningAppProcesses()) { if ( == ()) { return sName; } } } catch (Exception e) { tackTrace(); } return null;}
/*** 为webView设置⽬录后缀* @param context*/@RequiresApi(api = N_CODES.P)public static void initWebViewDataDirectory(Context context) { if (_INT >= N_CODES.P) { String processName = getProcessName(context); if (!kageName().equals(processName)) {//判断是否是默认进程名称 aDirectorySuffix(processName); } }六:Android 10Android 10包含多项功能升级,包括⼿势导航、通知栏管理、全局⿊暗模式等等,通知管理新增了“优先”、“⽆声”和“⾃适应通知”三种功能,新增深⾊主题的背景1.⽤户存储权限的变更Android Q 在外部存储设备中为每个应⽤提供了⼀个“隔离存储沙盒”(例如 /sdcard)。任何其他应⽤都⽆法直接访问您应⽤的沙盒⽂件。由于⽂件是您应⽤的私有⽂件,因此您不再需要任何权限即可在外部存储设备中访问和保存⾃⼰的⽂件。此变更可让您更轻松地保证⽤户⽂件的隐私性,并有助于减少应⽤所需的权限数量。⾕歌官⽅推荐应⽤在沙盒内存储⽂件的地址为ernalFilesDir()下的⽂件夹。⽐如要存储⼀张图⽚,则应放在ernalFilesDir(ORY_PICTURES)中。2.⽤户的定位权限的变更为了让⽤户更好地控制应⽤对位置信息的访问权限,Android Q 引⼊了新的位置权限 ACCESS_BACKGROUND_LOCATION。与现有的 ACCESS_FINE_LOCATION和 ACCESS_COARSE_LOCATION权限不同,新权限仅会影响应⽤在后台运⾏时对位置信息的访问权。除⾮应⽤的某个 Activity 可见或应⽤正在运⾏前台服务,否则应⽤将被视为在后台运⾏。与iOS系统⼀样,Q中也加⼊了后台位置权限ACCESS_BACKGROUND_LOCATION,如果应⽤需要在后台时也获得⽤户位置(⽐如滴滴),就需要动态申请ACCESS_BACKGROUND_LOCATION权限。当然如果不需要的话,应⽤就⽆需任何改动,且⾕歌会按照应⽤的targetSDK作出不同处理:targetSDK <= P 应⽤如果请求了ACCESS_FINE_LOCATION或 ACCESS_COARSE_LOCATION权限,Q设备会⾃动帮你申请ACCESS_BACKGROUND_LOCATION权限。3.设备唯⼀标识符的变更从 Android Q 开始,应⽤必须具有 READ_PRIVILEGED_PHONE_STATE签名权限才能访问设备的不可重置标识符(包含 IMEI 和序列号)。如果您的应⽤没有该权限,但您仍尝试查询标识符的相关信息,会返回空值或报错。设备唯⼀标识符需要特别注意,原来的READ_PHONE_STATE权限已经不能获得IMEI和序列。如果想在Q设备上通过使⽤以下代码获取设备的ID((TelephonyManager)getActivity().getSystemService(ONY_SERVICE)).getDeviceId()则执⾏以上代码会返回空值(targetSDK<=P)或者报错(targetSDK==Q)。且官⽅所说的READ_PRIVILEGED_PHONE_STATE权限只提供给系统app,所以这个⽅法⾏不通了。⾕歌官⽅给予了设备唯⼀ID最佳做法,但是此⽅法给出的ID可变,可以按照具体需求具体解决。本⽂给出⼀个不变和基本不重复的UUID⽅法:public static String getUUID() { String serial = null; String m_szDevIDShort = "35" + () % 10 + () % 10 + _() % 10 + () % 10 + () % 10 + () % 10 + () % 10 + () % 10 + () % 10 + () % 10 + () % 10 + () % 10 + () % 10; //13 位 try { if (_INT >= N_CODES.O) { serial = ial(); } else { serial = ; } //API>=9 使⽤serial号 return new UUID(m_de(), de()).toString(); } catch (Exception exception) { //serial需要⼀个初始化 serial = "serial"; // 随便⼀个初始化 } //使⽤硬件信息拼凑出来的15位号码 return new UUID(m_de(), de()).toString();}七:Android 11Android 11正式版系统在2020年9⽉9⽇正式发布。系统主要增强了聊天⽓泡,安全性和隐私性的保护,电源菜单,可以更好的⽀持瀑布屏,折叠屏,双屏和 Vulkan 扩展程序等。新特性1.短信更新改进⾸先是聊天泡泡。与Facebook多年来在Android上提供的Messenger应⽤程序类似,Android 11优化了短信功能,提供更加友好的交互。同时,为了确保⽤户能尽快收到对⽅的消息,Android 11在通知阴影(Notification Shade)中引⼊了⼀个专门的对话部分,它将提供对⽤户正在进⾏的任何对话的即时访问。这⼀更新将有助于短信消息从其他通知中脱颖⽽出。2.电话号码相关权限Android 11 更改了您的应⽤在读取电话号码时使⽤的与电话相关的权限。其实就是两个API:TelecomManager 类中的 getLine1Number() ⽅法TelecomManager 类中的 getMsisdn() ⽅法也就是当⽤到这两个API的时候,原来的READ_PHONE_STATE权限不管⽤了,需要READ_PHONE_NUMBERS权限才⾏。3.现在需要 APK 签名⽅案 v2对于以 Android 11(API 级别 30)为⽬标平台,且⽬前仅使⽤ APK 签名⽅案 v1 签名的应⽤,现在还必须使⽤ APK 签名⽅案 v2 或更⾼版本进⾏签名。⽤户⽆法在搭载 Android 11 的设备上安装或更新仅通过 APK 签名⽅案 v1 签名的应⽤。如果你的targetSdkVersion修改到30,那么你就必须要加上v2签名才⾏。否则⽆法安装和更新。⼋:Android 12Android 12 重新发现了代号为 “Columbus”的功能,并且优化了触发问题,新的⼿势需要更加⽤⼒敲击背⾯。新的双击背⾯⼿势可以截取屏幕截图、召唤⾕歌 Assistant、打开通知栏、控制媒体播放或打开最近的应⽤程序列表。1. AVIF图像⽀持1. 为了为您提供更⾼的图像质量和更有效的压缩,Android 12引⼊了对AV1图像⽂件格式(AVIF)的平台⽀持。AVIF是⽤于使⽤AV1编码的图像和图像序列的容器格式。与其他现代图像格式⼀样,AVIF利⽤了视频压缩中的帧内编码内容。与JPEG等较旧的图像格式相⽐,这可以显着提⾼相同⽂件⼤⼩的图像质量。AVIF(18.2kB)JPEG(20.7kB)2.前台服务优化前台服务是应⽤程序管理某些类型的⾯向⽤户任务的重要⽅式,但是如果过度使⽤,它们可能会影响性能,甚⾄导致应⽤程序中断。为了确保为⽤户带来更好的体验,对于以新平台为⽬标的应⽤,我们将从后台阻⽌前台服务启动。为了更轻松地从此模式过渡,我们在JobScheduler中引⼊了⼀个新的加急作业,该作业获得了较⾼的进程优先级,⽹络访问权限,并且可以在不考虑节电或节电的情况下⽴即运⾏。为了实现向后兼容,我们还在最新版本的Jetpack WorkManager库中内置了加急作业。。另外,为了减少⽤户的注意⼒,我们现在将某些前台服务通知的显⽰延迟最多10秒钟。这使短暂的任务有机会在显⽰通知之前完成
发布者:admin,转转请注明出处:http://www.yc00.com/news/1687841507a49947.html
评论列表(0条)