设为首页 加入收藏

TOP

Android 系统重启与关机:Java 代码实现
2014-11-24 12:55:58 来源: 作者: 【 】 浏览:0
Tags:Android 系统 重启 关机 Java 代码 实现

这篇博客是在 android 系统开发的基础之上进行实践的,所以如果你是纯粹的 app 开发,可能要让你失望了。


该代码在真机上测试成功,在模拟器上面测试失败。


在 linux 下面,重启 pc,非 root 用户需要执行 sudo reboot,所以在 android 下重启机器也需要一定的权限。


应用程序界面:



1. 新建一个 android 工程 reboot



2. 编写 Android.mk


LOCAL_PATH:= $(call my-dir)


include $(CLEAR_VARS)


LOCAL_MODULE_TAGS := optional


LOCAL_SRC_FILES := $(call all-java-files-under, src)


LOCAL_PACKAGE_NAME := reboot


LOCAL_CERTIFICATE := platform


include $(BUILD_PACKAGE)


# Use the folloing include to make our test apk.


include $(call all-makefiles-under,$(LOCAL_PATH))


具体含义可自行查阅资料。注意:LOCAL_CERTIFICATE := platform


3. 编写补充 AndroidMenifest.xml


< xml version="1.0" encoding="utf-8" >



package="mark.zhang"


android:versionCode="1"


android:versionName="1.0" >




android:icon="@drawable/ic_launcher"


android:label="@string/app_name"


android:sharedUserId="android.uid.system" >



android:label="@string/app_name"


android:name=".RebootActivity" >









注意:android:sharedUserId="android.uid.system"


4. 编写逻辑代码 RebootActivity.java


package mark.zhang;


import android.app.Activity;


import android.content.Intent;


import android.os.Bundle;


import android.view.View;


public class RebootActivity extends Activity {


// 是否显示关机确认的对话框


// false 不显示确认关机的对话框,直接关机


// true 显示确认关机的对话框,让用户选择是否确认关机


public static final boolean showShutdownDialog = false;


@Override


public void onCreate(Bundle savedInstanceState) {


super.onCreate(savedInstanceState);


setContentView(R.layout.main);


}


/**


* 发送广播.


*


* @param view


*/


public void onReboot(View view) {


Intent reboot = new Intent(Intent.ACTION_REBOOT);


reboot.putExtra("nowait", 1);


reboot.putExtra("interval", 1);


reboot.putExtra("window", 0);


sendBroadcast(reboot);


}


/**


* 启动 Activity.


*


* @param view


*/


public void onShutdown(View view) {


public void onShutdown(View view) {


Intent shutdown = new Intent(Intent.ACTION_REQUEST_SHUTDOWN);


shutdown.putExtra(Intent.EXTRA_KEY_CONFIRM, showShutdownDialog);


shutdown.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);


startActivity(shutdown);


}


}


}


注意:


Intent.ACTION_REQUEST_SHUTDOWN


Intent.EXTRA_KEY_CONFIRM


会报错,这是因为该属性是 {@hide} 的。


不要担心放到系统编译就可以了,注意下面的步骤即可。


5. 将整个工程放到 android 源码里面编译


a. 手动复制 reboot 到 src/packages/app 下面


如果编译成功,在 /out/target/product/generic/system/app 目录下面,会多一个 reboot.apk 文件。


6. 安装 apk


该 apk 必须放到 system/app 下面,即 adb push reboot.apk /system/app


思考:


关机或者重启,一个是发送广播,一个是启动 Activity。


通过查找相应的 action 或者 string 资源(如关机关键字)就可以找到对应的类。


我们知道,framwork 的 mk 文件、资源文件等都在:


/frameworks/base/core/res、frameworks/base/core/res/res


比如关机的那个 Activity 就是 ShutDownActiviy,其又调用 ShutdownThread.shutdown。


重启的相关的类在 WatchDog.java(定义了相关的量), 其内部类 RebootRequestReceiver 是主要代码。


继续追踪你就会了解整个流程了。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇android opensource: 源码开发基础 下一篇S3C2410多功能复用I/O口

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·哈希表 - 菜鸟教程 (2025-12-24 20:18:55)
·MySQL存储引擎InnoDB (2025-12-24 20:18:53)
·索引堆及其优化 - 菜 (2025-12-24 20:18:50)
·Shell 中各种括号的 (2025-12-24 19:50:39)
·Shell 变量 - 菜鸟教 (2025-12-24 19:50:37)