正文  环境搭建 > Android SDK >

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

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

前几天,为了解决一个问题,逆了一个小工具软件。在这个过程发现了一些很有用的东西,在此跟大家分享一下。首先声明几点: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每个版本的版本号,版本名,以后其他一些信息,感兴趣的同学可以去开发文档中看看。

  这里的英文单词,就是每个SDK版本的版本名称。

VERSION_CODES
-->
点击复制链接 与好友分享!回本站首页
function copyToClipBoard(){ var clipBoardContent=document.title + '\r\n' + document.location; clipBoardContent+='\r\n'; window.clipboardData.setData("Text",clipBoardContent); alert("恭喜您!复制成功"); } -->
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:Android设置窗口的背景图
下一篇:[译]关于Activity和Task的设计思路和方法
相关文章
android C编程技巧 及 C/C++开发测试
Java程序移植到android上问题解决小结
Android入门第一篇
Android入门第二篇之LinearLayout、Ab
Android入门第三篇之RelativeLayout、
Android入门第四篇之TableLayout (一)
Android入门第五篇之TableLayout (二)
Android入门第六篇之ListView (一)
Android入门第七篇之ListView (二)
Android入门第八篇之GridView(九宫图)
图文推荐
Android4.3的新类UiA
Android五种数据传递
Android Message和o
[Android]逸雨清风
排行
热门
1,359 | Android开发学习笔记:浅谈WebView
1,120 | Android的AlertDialog详解
1,024 | Android中ADT插件的安装
912 | Android之ActionBar学习
729 | Android自定义Button按钮显示样式
560 | 浅谈android的selector背景选择器
533 | Android中的PopupWindow详解
448 | Android Canvas类介绍(zhuan)
-->
文章
下载
读书
· Win2000下关闭无用端口
· 禁止非法用户登录综合设置 [win9x篇]
· 关上可恶的后门——消除NetBIOS隐患
· 网络入侵检测系统
· 潜伏在Windows默认设置中的陷井
· 调制解调器的不安全
· 构建Windows 2000服务器的安全防护林
· SQL Server 2000的安全配置
-->
阿里云手机应用开发点
编写高效的android代
 Android AIDL 远程服务器使用示例
 阿里云手机应用开发点滴
 编写高效的android代码(译文)
 给Android应用开发者的十个建议
 android网络业务的封装与调度
 Android_手把手教你写跳跃类游戏(3)
 Android 4.1 Surface系统变化说明
 android 实现QQ好友列表(扩展listvi
-->