Android高版本API方法如何在低版本系统上做兼容性处理浅析
前言
在最近的开发中需要获取到SIM卡的网络状态,在源码中看到一个方法:
TelephonyManager tm =(TelephonyManager)context.getSystemService(TELEPHONY_SERVICE); state =tm.getDataNetworkType();
但是报错了Call requires API level 24 (current min is 21): android.telephony.TelephonyManager#getDataNetworkType
Android 版本更替,新的版本带来新的特性,新的方法。
新的方法带来许多便利,但无法在低版本系统上运行,如果兼容性处理不恰当,APP在低版本系统上,运行时将会crash。
处理方法
1.添加@RequiresApi(api = Build.VERSION_CODES.N)
2.添加@TargetApi(Build.VERSION_CODES.N)
3.添加@SuppressLint("NewApi")
4.添加运行时SDK版本判断
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { tm.getDataNetworkType(); }
5.在低版本通过其他方法实现该功能
总结
第一、第二、第三种方法只是能编译通过,到了低于API24的系统运行,将会引发 java.lang.NoSuchMethodError
。
正确的做法是添加运行时SDK版本判断,判断为低版本时添加其他方法实现该功能
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。
相关推荐
-
Android中判断当前API的版本号方法
Android中由于不同版本API会有一些变化,导致一些较早版本可能不支持新的方法,或者某些功能处理过程不太一样,需要判断当前版本然后进行适当的处理. 那么,如何判断当前API的版本号呢? 例如判断api版本号是否大于等于19: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {...} 其中,Build.VERSION_CODES.KITKAT = 19 Build.VERSION.SDK_INT是什么: public stat
-
最新Android版本、代号、对应API/NDK级别、发布时间及市场份额
最新Android版本.API级别与代号对应关系 代号 版本号 API/NDK级别 发布时间 - O 8.0 API level 26 2017-3-21 牛轧糖 Nougat 7.1.1 API level 25 2016-10 7.0 API level 24 2016-08-22 棉花糖 Marshmallow 6.0.1 API level 23 2015-12 6 2015-10-05 棒棒糖 Lollipop 5.1.1 API level 22 2015-04-21 5.1 201
-
Android 高版本API方法在低版本系统上的兼容性处理
Android 版本更替,新的版本带来新的特性,新的方法. 新的方法带来许多便利,但无法在低版本系统上运行,如果兼容性处理不恰当,APP在低版本系统上,运行时将会crash. 本文以一个具体的例子说明如何在使用高API level的方法时处理好兼容性问题. 例子:根据给出路径,获取此路径所在分区的总空间大小. 在安卓中的文件存储使用参考中提到: 获取文件系统用量情况,在API level 9及其以上的系统,可直接调用File对象的相关方法,以下需自行计算 一般实现 就此需求而言,API leve
-
Android高版本API方法如何在低版本系统上做兼容性处理浅析
前言 在最近的开发中需要获取到SIM卡的网络状态,在源码中看到一个方法: TelephonyManager tm =(TelephonyManager)context.getSystemService(TELEPHONY_SERVICE); state =tm.getDataNetworkType(); 但是报错了Call requires API level 24 (current min is 21): android.telephony.TelephonyManager#getDataNe
-
Java程序实现导出Excel的方法(支持IE低版本)
今天想整理一下自己前段时间遇到的一个导出的问题. 因为项目的需求,要做一部分导出功能.开始的时候用的公司的导出,但是很奇怪有部分模块导出的时候就是会报500错误,发现在删减一些字段后就恢复了正常,当时因为项目紧张,也就临时删减了一些,但也不是长久之计,之后自己在原本的基础上重新修改整理了一下,目前运行还算稳定,就此和大家分享一下. 导出需要三个部分,js,公共方法,后台方法. js代码 function exportData() { //前台接收的参数 rwmc = $("#txt_rwmc&q
-
javascript获取浏览器类型和版本的方法(js获取浏览器版本)
复制代码 代码如下: function getExplorerInfo() { var explorer = window.navigator.userAgent.toLowerCase() ; //ie if (explorer.indexOf("msie") >= 0) { var ver=explorer.match(/msie ([\d.]+)/)[1]; return {type:"IE",version:ver}; } //firef
-
sqlserver数据库高版本备份还原为低版本的方法
问题描述:高版本sql备份在低版本sql还原问题(出现媒体簇的结构不正确) 分析原因:sql版本兼容问题,sql server兼容级别是用作向下兼容用,高版本的sql备份在低版本中不兼容 解决方法 : 1.通过管理器的脚本生成向导,把其他数据库 ,表,存储过程等对象的脚本生成,然后在低版本的sql server下执行建立这些对象.. 2.通过dts/ssis,将表中的数据导过去. 此处我们把第1种开发方法 做下详细介绍(以sql2008的其他数据库 还原到sql2005为例). 1.首先我们在s
-
SqlServer高版本数据备份还原到低版本
最近遇见一个问题: 想要将Sqlserver高版本备份的数据还原到低版本SqlServer上去,但是这在SqlServer中是没法直接还原数据库的,所以经过一系列的请教总结出来一下可用方法. 首先.你得在电脑上装有你将要操作的高版本以及低版本的SqlServer或者你能够连上SqlServer高版本所在的数据库(便于后面拷贝数据), 第二步.打开高版本数据库中你需要备份的数据库,将你备份的数据库相关的登录名或者用户删除.右键数据库->任务->生成脚本.在生成脚本的"选择对象"
-
Java高版本Api在Android中的使用方法详解
目录 Android插件开启对新Api的支持 常用的需要兼容处理的类: 1. LocalDate日期处理 2. Stream集合流操作 AGP7编译的问题 总结 Android插件开启对新Api的支持 这一天小王导入了一个库,上线之后直接崩了一大片? 找到其中的问题: 什么鬼哦?安卓8.0一下无法使用? 这样上线8.0以下的手机全部闪退了. 查一下才知道需要开启插件启动对Java Api的支持 android { defaultConfig { multiDexEnabled true } co
-
微信小程序收货地址API兼容低版本解决方法
微信官方在三月底搞了不少事情.开放个人注册权限,蓝牙,与公众号打通,未来还会开发AR,图片识别,文字识别等等能力. 起初大家只是将微信小程序当做玩具看待,相信如今会有很多人把他当成一门技术去研究了.微信小程序的想象空间已经很大. 说说新增API之一的收货地址.虽然看看兼容低版本. 先上图. API很简单,就一行代码 wx.chooseAddress(OBJECT) 调起的是原生页面,体验很不错.对电商类的小程序比较有利. 不过API是从微信客户端 6.5.6 版本开始支持.这让我想起来做andr
-
快速解决低版本Xcode不支持高版本iOS真机调试的问题方法
今天在进行真机调试的时候,遇到了以下问题. Could not locate device support files. This iPhone 6s is running iOS 10.2(14C92), which may not be supported by this version of Xcode. 见文知意,主要原因是在调试前我将iOS 升级到了最新版10.2版本,而我的Xcode8.1支持的最高版本是10.1的. 其实每次iOS SDK版本升级都会遇到相同的问题,之前遇到过相同的
-
Android 实现高斯模糊效果且兼容低版本
一.效果演示 项目中用到了高斯模糊效果,查阅过一些资料,考虑到性能问题最终还是选择使用Android自带的RenderScript库来实现,关于使用RenderScript来实现高斯模糊网上也有很多类似的方法,大部分都总结的比较乱,此处算是做一个整理吧,供有类似需求的同学参考及学习. (项目效果图) 简单描述项目效果图的实现思路: ① 加载定义的xml的Layout ② 使用截屏方法获取当前窗口的Bitmap对象 ③ 将Bitmap对象进行压缩及高斯模糊处理 ④ 将处理过的模糊图对象作为①中所加
随机推荐
- python连接mysql并提交mysql事务示例
- SQLSERVER 高级复 制 排错 技巧
- ORACLE DATAGUARD中手工处理日志v$archive_GAP的方法
- 详解JavaScript时间处理之几个月前或几个月后的指定日期
- JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
- JavaScript里 ==与===区别详解
- PHP使用mysqli扩展连接MySQL数据库
- PHP使用imagick读取PDF生成png缩略图的两种方法
- ASP在服务器自动解压RAR文件
- CentOS下php使用127.0.0.1不能连接mysql的解决方法
- 完美解决在ModalPopupExtender中使用CalendarExtender时被层遮挡的问题
- JavaScript 解析读取XML文档 实例代码
- 使用C#来编写一个异步的Socket服务器
- 做购物车系统时利用到得几个sqlserver 存储过程
- 用jquery实现点击栏目背景色改变
- 微信小程序 video组件详解
- Java项目安全处理方法
- java Future 接口使用方法详解
- asp.net调用系统设置字体文本框的方法
- 在ASP.NET 2.0中操作数据之十三:在DetailsView控件中使用TemplateField