`
runfeel
  • 浏览: 935918 次
文章分类
社区版块
存档分类
最新评论

自己实现Android关机命令

 
阅读更多
<style type="text/css"> <!-- pre.western {font-family:"DejaVu Sans Mono",monospace} pre.cjk {font-family:"DejaVu Sans",monospace} pre.ctl {font-family:"DejaVu Sans Mono",monospace} p {margin-bottom:0.21cm} --> </style>
	pad中自带有重启命令(reboot),本以为也应该有关机命令啊,可是找来找去也没有诸如shutdownpoweroff等命令。
然后想到busybox中有一个poweroff命令,故又去编译了一个busybox推进去,执行了busybox poweroff之后看了下返回码
是0(即echo $?),然后,然后什么也没发生……
	网上流行的方法是在Java端发送要求关机的Intent,如下: 
Intent intent = new Intent(Intent.ACTION_REQUEST_SHUTDOWN);
intent.putExtra(Intent.EXTRA_KEY_CONFIRM, false);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(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
方法,具体如下:

static void android_os_Power_shutdown(JNIEnv *env, jobject clazz)
{
    sync();
#ifdef HAVE_ANDROID_OS
    reboot(RB_POWER_OFF);
#endif
}
看到有个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:= false
LOCAL_SHARED_LIBRARIES:= libutils
include $(BUILD_EXECUTABLE)
3、编写shutdown.c源文件,如下:
#include <stdio.h>
#include <stdlib.h>
#include <utils/Log.h>
#include <sys/reboot.h>

#ifndef LOG_TAG
#define LOG_TAG "dxyh"
#endif

int main(int argc, char **argv)
{
	int retval;

	if ((retval = __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2,
					RB_POWER_OFF, NULL)) < 0) {
		LOGE("Try to shutdown the machine failed!");
		exit(EXIT_FAILURE);
	}
	return 0;
}
4mm
5
、将生成的shutdown可执行程序推入到pad中的/system/bin下即可。

6
、然后就可以和其他命令一样运行了,例如adb shell shutdown

分享到:
评论

相关推荐

    android实现自动关机的具体方法代码.doc.docx

    Android 实现自动关机的具体方法代码是指使用 Android 操作系统实现自动关机的方法,通常用于在 Android 设备上实现自动关机的功能。下面是实现自动关机的具体方法代码: 代码解释 private void shutdown(){ try ...

    android关机重启功能实现

    以上就是关于Android关机和重启功能实现的一些基本知识。在实际开发中,你需要根据具体的项目需求和设备环境来调整和优化代码。如果你只是想在应用中提供一个模拟的关机或重启效果,可以考虑使用动画或者加载屏幕来...

    android 定时关机 重启

    在Android系统中,实现定时关机和重启功能主要涉及到对系统的底层操作,这通常需要root权限。以下将详细讲解如何在Android中实现这些功能。 首先,我们要了解Android系统的启动流程。开机时,Android会通过...

    Android自动开关机实现

    总结来说,实现Android自动开关机涉及到权限获取、BroadcastReceiver、AlarmManager、shell命令等技术,需要对Android系统有深入理解,特别是对于系统级别的操作。在开发过程中,确保安全性、用户友好性和兼容性是至...

    android之关机动画

    Android 系统中的关机动画实现和开机动画实现类似,只是读取的动画文件不同。我们可以通过添加一个 bool 类型变量 `mShutdown` 来判断是否是关机,然后在 readToRun 函数中读取对应的动画文件。修改 `BootAnimation...

    源码-Android自动开关机实现

    在Android系统中,实现自动开关机涉及到多个层次的技术,包括系统服务、权限管理以及与硬件交互等。以下是对"源码-Android自动开关机实现"这个主题的详细讲解。 首先,我们要明白Android是一个基于Linux内核的操作...

    android关机小工具

    总结来说,创建一个“android关机小工具”是一个涉及多方面技术的挑战,需要对Android系统有深入理解,同时也需要考虑用户体验和安全性。这个过程既包括了Android应用开发的基本技能,也涵盖了高级特性和系统级别的...

    Android ADB命令的使用

    ### Android ADB命令的使用 #### 知识点概述 ADB(Android Debug Bridge)是Android提供的一个命令行工具,主要用于实现计算机与Android设备之间的通信。它可以帮助开发者在开发过程中进行调试、安装应用、数据...

    android定时开关机或重启的代码

    总结来说,实现Android定时开关机或重启功能需要结合BroadcastReceiver、Service、AlarmManager和权限管理等知识,同时需要注意安全性和设备兼容性。通过对这些概念的理解和实践,可以开发出满足特定需求的解决方案...

    android代码控制关机重启

    在Android系统中,控制设备的关机和重启是高级功能,通常由系统权限较高的应用程序或者服务执行。在本文中,我们将深入探讨如何通过代码实现这一功能,并了解相关的安全性和限制。 首先,我们要知道,Android系统...

    Android应用源码之自动开关机实现.zip

    如果没有这些权限,应用将无法执行相关的开关机命令。 5. **JNI(Java Native Interface)**:为了绕过Android的安全限制,开发者可能使用JNI技术,编写C/C++的原生代码来直接调用Linux内核的API进行开关机操作。...

    利用LINUX命令实现快速关机和重启

    在Linux中,常用的关机命令有`shutdown`、`halt`和`poweroff`。例如,如果你想要在5分钟后关闭系统,你可以输入: ```bash shutdown -h +5 "系统将在5分钟后关闭" ``` 这里的`-h`参数表示halt,即关机,`+5`...

    Android实现用Android手机控制PC端的关机和重启的功能

    我的Android进阶之旅------&gt;Android实现用Android手机控制PC端的关机和重启的功能(一)PC服务器端 (地址:http://blog.csdn.net/ouyang_peng/article/details/47004617) 我的Android进阶之旅------&gt;Android实现用...

    android开关机动画切换

    在Android系统中,开关机动画是用户在启动或关闭设备时看到的一系列动态图像,它不仅为用户提供了视觉反馈,也是品牌识别的一部分。本主题主要关注如何在Android系统中进行开关机动画的切换,这对于特定的移动开发...

    Android实现关机与重启的几种方式(推荐)

    在Android平台上,实现设备的关机与重启功能通常需要管理员级别的权限,因为这些操作涉及到系统的安全性和稳定性。在默认的SDK中,Google并未提供直接的API供应用开发者使用。但是,开发者可以通过一些间接的方式来...

    android关机流程

    - 最终通过`sys_reboot()`系统调用到达内核层,执行关机命令。 3. **内核关机流程**:在内核层面,`sys_reboot()`会调用`kernel_power_off()`,进而调用`machine_power_off()`,最终通过`pm_power_off()`完成硬件...

    android定时关机,重启

    如果要执行关机命令,可以将"reboot"替换为"shutdown -h now",这里的"-h"表示挂起,"now"表示立即执行。 2. **使用ProcessBuilder类执行命令** ```java ProcessBuilder pb = new ProcessBuilder("su", "-c", ...

    Android自动关机源码

    在Android系统中,实现自动关机功能涉及到对操作系统底层机制的理解和权限的控制。自动关机功能通常是通过发送特定的系统命令来实现的,这些命令通常由系统服务或者权限较高的应用执行。以下是对"Android自动关机...

Global site tag (gtag.js) - Google Analytics