Android SDK 版本号与版本名称对照及一个编程小技巧

  次阅读 来源:互联网(转载协议) 2016-01-14 15:32 我要评论(0)

前几天,为了解决一个问题,逆了一个小工具软件。在这个过程发现了一些很有用的东西,在此跟大家分享一下。首先声明几点:1、逆出来的代码,需要大量的人工分析,我现在只看了一点点;2、代码不会公开,请不要向我要代码,我怕麻烦~~~唉,做了这件坏事,内心忐~~~忑~~~啊!

一、通过编程实现对GPS的开关

Android手机和模拟器上有一个管理GPS开关的设置界面,如下:

通过这个管理界面,我们可以对GPS进行管理,以实现我们的手机定位功能。曾经在网上搜集资料,希望找到通过代码对GPS进行管理的源码,也确实找到了一份代码(稍后附上代码),但是这份代码在SDK 2.3及以上的版本中,始终不能运行。于是,产生了一个逆向的邪念~

在分析上面提到的小工具之后,发现了其对GPS管理的功能模块,经过简单的分析之后,发现在Android SDK版本不同的情况下,对GPS控制的代码还不一样。首先附上在2.2版本及以前版本的GPS控制代码

/*** 实现了一个GPS的开关,当前关闭则打开,当前打开则关闭* 适用版本号:* 1.6 / 2.1 / 2.2** Uri.parse()的参数"custom:3"中的数字3的枚举值如下:* private static final int BUTTON_BLUETOOTH = 4;* private static final int BUTTON_BRIGHTNESS = 1;* private static final int BUTTON_GPS = 3;* private static final int BUTTON_SYNC = 2;* private static final int BUTTON_WIFI = 0;* */private void toggleGPS() {// 当SDK版本号为2.3以下版本时if (Build.VERSION.SDK_INT < Build.VERSION_CODES.GINGERBREAD) {Intent gpsIntent = new Intent();gpsIntent.setClassName("com.android.settings","com.android.settings.widget.SettingsAppWidgetProvider");gpsIntent.addCategory("android.intent.category.ALTERNATIVE");gpsIntent.setData(Uri.parse("custom:3"));try {PendingIntent.getBroadcast(this, 0, gpsIntent, 0).send();} catch (CanceledException e) {e.printStackTrace();}}}

以上这段代码,是利用Android平台自带的Widget插件对各种开关进行管理的。实现的是一个GPS的开关,如果当前GPS处于关闭状态,则将其打开;如果GPS处于打开状态,则将其关闭。

大家可能已经注意到函数体内部的第一行注释“当SDK版本号为2.3一下版本时”,的确我们在这里做了一个针对SDK版本的判断。这一个判断也是我们下一个小节要重点介绍的内容,暂时放在一边,不要在这一节里面跑偏了。

在SDK 2.3及之后的版本中,那个小工具利用了SDK中的类Settings.Secure的一个静态方法:

public static final void setLocationProviderEnabled (ContentResolver cr, String provider, boolean enabled)

Since: API Level 8

Thread-safe method for enabling or disabling a single location provider.

Parameters

cr

the content resolver to use

provider

the location provider to enable or disable

enabled

true if the provider should be enabled

这个方法从API Level 8才开始提供,API Level 8对应的SDK版本是2.2,OK!那按照正常情况来说,这个函数应该是支持SDK2.3的。不妨写个函数来试试。(这个代码比较简单,我就不再贴代码了)结果却令人意外,没有给用户分配权限"android.permission.WRITE_SETTINGS";好嘛,那就加上权限;又提示没有权限“android.permission.WRITE_SECURE_SETTINGS”,好说,再加上这个权限。接下来,见证悲催的时刻到了,还是提示没有“android.permission.WRITE_SECURE_SETTINGS”的权限。明明已经加上了权限,为何还是提示。最后也是在各种大小论坛里面查找资料,说是在2.3版本里面,Google把这个权限完全锁住了,好吧,悲剧了,除非你自己改Android代码,否则就真的没有别的办法了。

所以,在第一节结束的时候,提醒各位童鞋,如果想在SDK2.3版本管理GPS,还是乖乖的用你的Intent打开系统默认的管理GPS的Activity吧。

二、SDK版本对照

为了下载android SDK的源码,我到处找链接,好不容易一个链接,发现文件名后面怎么还有一个类似英文名的东西?

的确,像我这样的初学者,是不知道这个英文单词代表什么意思的。但是在逆代码的过程,发现了Android API给我们提供了这样个类android.os.Build,在这个类中定义了Android SDK每个版本的版本号,版本名,以后其他一些信息,感兴趣的同学可以去开发文档中看看。

本站部分文章来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • Oculus公布原型机,大幅度提升可视角,能实现140°的视场水平

    Oculus公布原型机,大幅度提升可视角,能实现140°的视场水平

  • 2018深圳国际人工智能展览会 2018 shenzhen International Artif

    2018深圳国际人工智能展览会 2018 shenzhen International Artif

  • Michael I. Jordan带你解读百万奖金ATEC蚂蚁人工智能大赛

    Michael I. Jordan带你解读百万奖金ATEC蚂蚁人工智能大赛

  • teamLab创始人猪子寿之: 抛去衣食住行,我还剩下什么?

    teamLab创始人猪子寿之: 抛去衣食住行,我还剩下什么?

网友点评网友点评
阅读推荐阅读推荐

据外媒报道,STEER打造了首款完全自动驾驶停车技术,旨在使常规车辆转变为无人驾驶车辆。STEER的首款技术应用是4级自动驾驶及网络安全停车...

近日,美国软性机器抓手制造商 Soft Robotics 宣布,获得 2000 万美元的融资,本轮投资者包括 Scale Venture Partners,Calibrate Ventures...

据外媒报道,加州车管局发布了《2017自动驾驶脱离报告(California Autonomous Vehicle Disengagement Reports)》,其中谈及了脱离的具体...

用人机语音交互,来解决智能家居适老的问题;通过家庭门禁与安防套件、空气净化套件、可燃气体与有害气体监控套件等相互联动,在不同生活情...