Android使用广播实现关机及重启
来源:互联网 发布:后盾网博客系统源码 编辑:程序博客网 时间:2024/05/17 06:24
转自:http://blog.csdn.net/zzp16/article/details/7188185
最近研究App拥有root权限,弄了好久关机重启都没有成功,特别郁闷。就换另外一种更简单的方式,一试就成功了。
步骤一:编写Java代码
java部分代码:
case R.id.broadcast_reboot: //重启
Log.v("Reboot", "Reboot-->broadcast_reboot");
Intent i = new Intent(Intent.ACTION_REBOOT);
i.putExtra("nowait", 1);
i.putExtra("interval", 1);
i.putExtra("window", 0);
sendBroadcast(i);
break;
case R.id.broadcast_shutdown: //关机
Log.v("Reboot", "Reboot-->broadcast_shutdown");
Intent intent = new Intent(Intent.ACTION_REQUEST_SHUTDOWN);
intent.putExtra(Intent.EXTRA_KEY_CONFIRM, false);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
break;
注:关机可以设置时间设置【定时关机】功能,关机中的Intent.ACTION_REQUEST_SHUTDOWN 及 Intent.EXTRA_KEY_CONFIRM 在IDE中报错,但可以忽略,因为这两个属性不对上层开放,APP在源码中编译就可以直接使用。
步骤二:修改Manifest.xml中属性
<manifestxmlns:android="http://schemas.android.com/apk/res/android"……android:sharedUserId="android.uid.system"……><uses-permissionandroid:name="android.permission.SHUTDOWN"/>……</manifest>
注:
步骤三:编译APK
将项目拷贝到Android源码中进行编译,我拷贝到【gingerbread/development/apps/】下,并将项目的bin文件夹给删除,同时最重要的一步在项目下编写mk文件,山寨其它项目的mk文件写如下,不要漏掉LOCAL_CERTIFICATE := platform
Android.mk:
LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_SRC_FILES := $(call all-java-files-under, src)LOCAL_PACKAGE_NAME := 你的项目名LOCAL_CERTIFICATE := platforminclude $(BUILD_PACKAGE)
步骤四:
通过mm编译生成的apk安装到机器中,就可以操作重启及关机
注:使用相同的方法可以修改系统时间,重点是将应用提升到拥有系统权限,但进过此操作并未获得root权限。
补充:后来使用init.rc启动系统服务的方法也是可行的,之前是因为编写关机 和 重启的sh文件使用了中文符号,使得sh命令有问题
方法二可以参考:http://my.unix-center.net/~Simon_fu/?p=951
PS:想了解进一步定制开机重启功能请点此《为Android系统定制重启功能》
通过编译后到apk不能安装,主要是因为系统权限的问题。(Failure [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE]),需用在相同源码固件的系统才能使用系统签名的应用。
首先AndroidManifest.xml中加入android:sharedUserId="android.uid.system"这个属性。通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中。那么把程序的UID配成android.uid.system,也就是要让程序运行在系统进程中,这样就有权限来修改系统时间了。
只是加入UID还不够,如果这时候安装APK的话发现无法安装,提示签名不符,原因是程序想要运行在系统进程中还要有目标系统的platform key,就是上面第二个方法提到的platform.pk8和platform.x509.pem两个文件。用这两个key签名后apk才真正可以放入系统进程中。第一个方法中加入LOCAL_CERTIFICATE := platform其实就是用这两个key来签名。 这也有一个问题,就是这样生成的程序只有在原始的Android系统或者是自己编译的系统中才可以用,因为这样的系统才可以拿到 platform.pk8和platform.x509.pem两个文件。要是别家公司做的Android上连安装都安装不了。试试原始的Android 中的key来签名,程序在模拟器上运行OK
见链接:http://bbs.gfan.com/android-85440-1-1.html 0 0
- 使用广播实现的Android关机及重启
- 使用广播实现的Android关机及重启
- 使用广播实现的Android关机及重启
- 使用广播实现的Android关机及重启
- Android使用广播实现关机及重启
- Android使用代码实现关机/重启
- android 重启、开机、关机的广播
- Android实现关机/重启
- Android关机重启实现
- 一、通过发送系统广播让android关机、重启
- 重启及关机
- Android 代码实现关机重启
- Android实现关机重启的方法
- android 如何实现重启、关机
- android实现关机和重启
- Android app实现重启、关机功能
- Android编程实现关机和重启
- Android实现系统关机和重启
- Wi-Fi 直连
- android背景选择器selector用法
- error while loading shared libraries: libpcre.so.1错误
- Cheat—— 给Linux初学者和管理员一个终极命令行"备忘单"
- 缓存DNS服务器和主DNS服务器的快速搭建详解
- Android使用广播实现关机及重启
- Android ActionBar隐藏修改图标和标题
- A new!
- Hibernate持久层全面描述
- mysql防止数据重复插入方法分析
- mysql忘记密码的处理方法
- Interface Builder 使用技巧
- 为嵌入式开发板客户端自己动手在虚拟机上搭建时间同步NTP服务器
- C#中数组、ArrayList和List三者的区别