android手机自动重启 中如何实现关机,重启

Android 系统重启与关机:Java 代码实现_Linux编程_Linux公社-Linux系统门户网站
你好,游客
Android 系统重启与关机:Java 代码实现
来源:Linux公社&
作者:androidbluetooth
在应用层如何通过代码实现
系统的重启,分享给大家。
这篇博客是在 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"?&
&manifest xmlns:android="http://schemas.android.com/apk/res/android"
&&& package="mark.zhang"
&&& android:versionCode="1"
&&& android:versionName="1.0" &
&uses-sdk android:minSdkVersion="7" /&
&application
&&&&&&& android:icon="@drawable/ic_launcher"
&&&&&&& android:label="@string/app_name"
&&&&&&& android:sharedUserId="android.uid.system" &
&&&&&&&&&&& android:label="@string/app_name"
&&&&&&&&&&& android:name=".RebootActivity" &
&&&&&&&&&&& &intent-filter &
&&&&&&&&&&&&&&& &action android:name="android.intent.action.MAIN" /&
&&&&&&&&&&&&&&& &category android:name="android.intent.category.LAUNCHER" /&
&&&&&&&&&&& &/intent-filter&
&&&&&&& &/activity&
&/application&
&/manifest&
注意:android:sharedUserId="android.uid.system"
4. 编写逻辑代码 RebootActivity.java
package mark.
import android.app.A
import android.content.I
import android.os.B
import android.view.V
public class RebootActivity extends Activity {
&&& // 是否显示关机确认的对话框
&&& // false 不显示确认关机的对话框,直接关机
&&& // true 显示确认关机的对话框,让用户选择是否确认关机
&&& public static final boolean showShutdownDialog =
&&& 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 下面
b. mm -j4 开始编译(可以参考 )
如果编译成功,在 /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 是主要代码。
继续追踪你就会了解整个流程了。
相关资讯 & & &
& (03/26/:38)
& (10/22/:00)
& (10/17/:52)
& (12/30/:25)
& (10/17/:29)
& (08/14/:27)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款如何在安卓手机关机弹出的选项中添加重启命令? - 知乎有问题,上知乎。知乎作为中文互联网最大的知识分享平台,以「知识连接一切」为愿景,致力于构建一个人人都可以便捷接入的知识分享网络,让人们便捷地与世界分享知识、经验和见解,发现更大的世界。2被浏览467分享邀请回答添加评论分享收藏感谢收起写回答博客分类:
关机:
Intent shutdown = new Intent(Intent.ACTION_REQUEST_SHUTDOWN);
shutdown.putExtra(Intent.EXTRA_KEY_CONFIRM, false);
shutdown.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(shutdown);
重启:
Intent reboot = new Intent(Intent.ACTION_REBOOT);
reboot.putExtra("nowait", 1);
reboot.putExtra("interval", 1);
reboot.putExtra("window", 0);
sendBroadcast(reboot);
加上
&manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="1"
[color=red]android:sharedUserId="android.uid.system"[/color]
android:versionName="1.0"&
aichixihongshi
浏览: 461906 次
来自: 济南
不能更赞了!
这个代码是不是不全呀,能不能提供完整版的给予参考呢?xiexi ...
顶上天!!!!!!!!!!!!!!!!!!
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'自己实现Android关机命令
原文地址:&
& pad中自带有重启命令(reboot),本以为也应该有关机命令啊,可是找来找去也没有诸如shutdown、poweroff等命令。 然后想到busybox中有一个poweroff命令,故又去编译了一个busybox推进去,执行了busybox poweroff之后看了下返回码 是0(即echo $?),然后,然后什么也没发生……&网上流行的方法是在Java端发送要求关机的Intent,如下:
需要加上相关的权限:android:sharedUserId="android.uid.system"&uses-permission android:name="android.permission.SHUTDOWN"/&&&&&&& 但要从apk中实现关机的话,那还不如手动关呢,所以自己动手了,写个诸如shutdown的小命令,实现也很简单,
找到系统怎么处理关机的,然后我们把那段代码拿出来就行了。&&&&&& 系统中处理关机部分的代码路径:frameworks/base/core/jni/android_os_Power.cpp,里面有个android_os_Power_shutdown方法,具体如下:&
看到有个reboot函数,然后再追踪这个reboot(RB_POWER_OFF)函数,看到其最终会调用__reboot这个函数
(汇编实现的),我们只要给它传递“合适”的参数就行了。
& & & &&代码实现:1、在Android源码目录中的packages/apps/下创建一个目录,例如:Hello。2、编写Android.mk文件:LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)
LOCAL_SRC_FILES:= shutdown.c
LOCAL_MODULE:= shutdown&
LOCAL_PRELINK_MODULE:= falseLOCAL_SHARED_LIBRARIES:= libutilsinclude $(BUILD_EXECUTABLE)3、编写shutdown.c源文件,如下:&
5、将生成的shutdown可执行程序推入到pad中的/system/bin下即可。
6、然后就可以和其他命令一样运行了,例如adb shell shutdown。
& & 其实进入adb shell,然后执行reboot -p或者直接在命令行输入adb reboot -p同样可以实现关机操作,前者系统会有10s的提醒,后者是直接执行关机。在默认情况下使用reboot命令调用的是reboot -n 也就是重启的命令。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。博客分类:
外部调用关机API时,会发送类似于下面的intent:
Intent newIntent = new Intent(Intent.ACTION_REQUEST_SHUTDOWN);
newIntent.putExtra(Intent.EXTRA_KEY_CONFIRM,false);
startActivity(newIntent);
而响应的地方,是一个无界面的activity,其类是framework下面的com.android.server.ShutdownActivity.
其配置的xml如下所示:
&activity android:name="com.android.server.ShutdownActivity"
android:permission="android.permission.SHUTDOWN"
android:configChanges="orientation|keyboardHidden|navigation|mcc|mnc|locale|touchscreen|fontScale|keyboard"
android:excludeFromRecents="true"&
&intent-filter&
&action android:name="android.intent.action.ACTION_REQUEST_SHUTDOWN" /&
&category android:name="android.intent.category.DEFAULT" /&
&/intent-filter&
&/activity&
a_lee 写道lz要在代码上实现定时关机怎么实现?我虽然没有做过定时关机,但是有一个思路可以参考:系统每过1分钟会发一个time_tick的广播,你接收到广播后,判断当时时间和你设置的关机时间是否相同,如果时间到了,就去调用关机.这是一个思路,当然,这样从应用层就可以做了,可能有一些权限限制.开机可能要硬件支持,听说Android上的关机闹钟还属于专利的级别了
lz要在代码上实现定时关机怎么实现?我虽然没有做过定时关机,但是有一个思路可以参考:系统每过1分钟会发一个time_tick的广播,你接收到广播后,判断当时时间和你设置的关机时间是否相同,如果时间到了,就去调用关机.这是一个思路,当然,这样从应用层就可以做了,可能有一些权限限制.
pop1030123
浏览: 252638 次
来自: 北京
遇到相同的问题了,最后发现是ecache.xml配置文件中加了 ...
引用[b][/b][u][/u]引用pop1030123 写道 ...
pop1030123 写道a_lee 写道lz要在代码上实现定 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 android 实现自动关机 的文章

 

随机推荐