使用APP让Android睡眠

作者:Aningsk ,本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可。
 

在Android应用中使用某些特殊的功能,比如使设备睡眠(电源管理),是需要APP获得系统的权限的(不是指用户的root权限)。这时候,使用eclipse编译出的APP就不能使用了,因为eclipse编写的APP是不能获得系统签名的。所以要设法获得Android系统的签名,比较常用的方法就是,将APP的源代码放在Android源码中进行编译。当然,还有其他方法修改APP签名;不过那些方法我就不会了,嘿嘿。

首先,说一下应该如何在APP使Android睡眠。

Android中提供了一个接口goToSleep(long),这个接口就是能够使设备睡眠的。但是,这个方法在普通的APP中是没有权限调用的,必须是有系统权限的APP,就是要有系统签名,作为系统的一部分运行。这就要放到源代码里编译了,这个编译的问题待会儿再说,先说写代码:如何使用goToSleep(long)。

代码的构想很简单,我就是想让一个Button按下时,调用PowerManager的goToSleep(long)。

上图就是MainActivity.java的内容。一开始,我把获取PowerManager的代码放在onCreate外面了,结果是一运行,这个APP就崩溃了。Android出来的错误信息是:System services not available to Activities before onCreate()。原因就是,Activity中的一个类变量的构造函数需要激活系统服务,而我一开始实例化这个类变量直接在Activity类中,而不是在onCreate()里面。所以,把这个实例化工作放到onCreate()中就可以了。

然后是关于AndroidManifest.xml

添加"android:sharedUserId="android.uid.syste""就可以让APP作为系统的一部分运行了,然后是添加相关权限DEVICE_POWER,因为我需要使用android的电源管理。(那个WAKE_LOCK没有用到的。)另外,使用DEVICE_POWER,在eclipse中可能会报错,这个不用管它,反正不是普通的APP也不用eclipse编译,只是用它来编辑罢了。

还有在使用Button的时候,按钮的名字字符串最好是android:text="@string/button_name这种类型(在strings.xml中加上相关的字符串项目)。否则,在源码里编译可能出错(虽然在eclipse里是警告。)

然后,是编译的问题了。

把这个eclipse的工程整个复制到Android源码中(路径:/android/packages/apps/Sleep/)。里面还要再加一个makefile文件,叫做Android.mk。内容如下图:

这样就OK啦~

然后把它编译出来。编译完成,就可以在android/out/target/product/具体平台名称/system/app/ 下找到"Sleep.apk"了。这样就可以用了。当然,如果编译整个Android系统,这个APP也会作为系统自带的APP添加进去的。

时间比较仓促啊~写得不很详细啦~

如果有什么错误欢迎大家指正啊,这种APP我也是第一次写。。。

Aningsk

2015-01-05

猜你喜欢

转载自blog.csdn.net/aningsk/article/details/81261620
今日推荐