安卓开发中,在低版本SDK使用高版本的API会报错。一般处理方法是换一种实现方法,或者在高版本SDK中使用高版本API,低版本SDK中使用效果可能会差点的折衷方案;后者可以用如下技巧来实现。
步骤
Step 1
在使用了高版本API的方法前面加一个 @TargetApi(API号)
Step 2
在代码上用版本判断来控制不同版本使用不同的代码
eg.
@TargetApi(11)
public void text(){
if(Build.VERSION.SDK_INT >= 11){
// 使用api11 新加 api的方法
}
else {
// 低版本的折衷处理方法
}
}
知识点
1.Annotation
Annotation继承自java.lang.annotation.Annotation的类,用于向程序分析工具或虚拟机提供package class field methed 等方面的信息。Annotation 提供了一条与程序元素关联任何信息或者任何元数据(metadata)的途径。从某些方面看, annotation 就像修饰符一样被使用,并应用于包、类 型、构造方法、方法、成员变量、参数、本地变量的声明中。这些信息被存储在annotation的“name=value”结构对中。 annotation 类型是一种接口,能够通过java反射API的方式提供对其信息的访问。
annotaion 不影响程序代码的执行,无论增加、删除 annotation ,代码都始终如一的执行。
annotaion 与其他类的主要不同之处在于其使用方式;只要按照“@+annotation类型名称+(..逗号分割的name-value对...)”的组成语法,写在需要的地方。其中成员可以按照任何的顺序。如果 annotation 类型定义了某个成员的默认值,则这个成员可以被省略,eg.@Override。
annotation 方式写程序简短实用易维护,所以越来越成为主流。
2.Android lint
Android lint是一个代码扫描工具,能够帮助我们识别代码结构存在的问题,比如使用了高于minSdk的api。
3.@TargetAPI Annotation
@TargetAPI 对应android.annotation.TargetApi,与它相似的注解还有@SuppressLint,作用都是告诉编译器:你可以忽略掉lint错误了,我用高于minSdk的api又咋滴?要你管啊~我不怕啊^_^
为什么这里我们用 @TargetAPI 而不用@SuppressLint,因为@TargetAPI还能指明应用的API版本,在代码中获得平台的SDK版本与这个版本对比后提示应用与平台的兼容性,比如现在的TargetAPI指定为11,以后我用了13的,仍然会得到版本不兼容的提示;而@SuppressLint做不到这一点,所以@TargetAPI更优。
相关推荐
is a C++ library for accessing multiple SQL databases Oracle SQL Server DB2 Sybase Informix InterBase SQLBase MySQL PostgreSQL SQLite SQL Anywhere and ODBC It uses native APIs of target DBMS so ...
基于Eclipse平台的Target+Register+Editor的研究与实现 本文所基于的项目Target Register Editor是RVDS(RealView Development Suit)集成开发环境的一部分。它是基于Eclipse平台的编辑器插件,主要功 能是实现对BCD...
主要介绍了详解JDK 5 Annotation 注解之@Target的用法介绍,需要的朋友可以参考下
CacheWebView English CacheWebView通过拦截资源实现自定义缓存静态资源。突破WebView缓存空间限制,让缓存更简单。让网站离线也能正常访问。 为什么要用CacheWebView 让WebView缓存空间更大 ... @TargetApi(Bui
解决setTransitionName方法的兼容问题 android5.0中View类提供了setTransitionName()方法,用本库同样可以实现相同功能,只是在用法上稍微有点区别:TransitionManager.setTransitionName(View v, String ...
ExactTarget - ExactTarget API 的 Ruby 接口。 简介 ExactTarget 是一个电子邮件营销解决方案提供商,具有基于 http 的 API,用于执行各种任务,例如管理邮件列表、管理订阅者和排队电子邮件作业。 这个 gem 是一个...
Xamarin.Android has several Android API level settings that determine your app's compatibility with multiple versions of Android. This guide explains what these settings mean, how to configure them, ...
2.最新版本的ASP.NET.CORE.Web API 3.实现dbfrist和code 。 4.博客链接:https://blog.csdn.net/EAyayaya/article/details/124048491 5. 不是MVC方式 6.Entity Framework Core Entity Framework Core.Tools Entity ...
JSP+Servlet+Mysql实现在线商城项目源码,有视频,有教程在里面。
此客户端库,目前支持百度商业推广API V4版本功能。 本客户端库旨在提供百度商业推广API以Json方式调用封装以及代理类生成,并不提供客户端业务逻辑。 注意事项: 1. 如何初始化Service 使用者获取具体的service...
异常:Invalid character found in the request target. The valid characters are defined in RFC 3986;原因:由于tomcat的新版本增加了一个新特性,就是严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了...
windows vs2015 grpc protobuf,release,debug。大家可以直接用
Android Studio运行真机调试出现min Sdk(API 26)device Sdk(API 23)解决方法
此版本还可以使用Vuforia的ObjectTarget功能,unity版本建议使用2019
车辆API REST API,用于维护车辆数据并提供车辆详细信息(包括价格和地址)的完整视图。产品特点REST API探索主要... $ mvn clean package$ java -jar target/vehicles-api-0.0.1-SNAPSHOT.jar将其作为Maven项目导入到
web-share-target, Web API 接收共享数据的建议 Web共享目标 API日期: 2016-06-08这个网站详细介绍了增加网站功能以接收来自其他网站和应用的共享数据的建议。解释文档,这是对提案的高级概述。规范 。接口文档,这...
一个关于iscsi target的开源实现,是在用户态完成的。可以作为初学者的参考
@Target说明了Annotation所修饰的对象范围:Annotation可被⽤于 packages、types(类、接⼝、枚举、Annotation类型)、 类型成员(⽅法、构造⽅法、成员变量、枚举值)、⽅法参数和本地变量(如循环变量、catch...
androidQ版兼容性指导
因为第三方API的请求是外网的,存在跨域问题,所以要配置代理,配置如下: 文件:vue.config.js const vueConfig = { //上面还有项目的其他配置 devServer: { port: 8000, proxy: { '/ai': { target: '...