2

如何判断 Android 何时关闭?

我可以将功能放入已经以 root 身份运行的 C++ 守护程序中,或者放入非特权 Java 应用程序中。

我能区分关机和重启吗?(我只关心关机,重启时一定不能误报。)

4

2 回答 2

4

使用广播接收器:

@Override public void onReceive(Context context, Intent intent) {
    if (ACTION_SHUTDOWN.equals(intent.getAction()) || QUICKBOOT_POWEROFF.equals(intent.getAction())) {
        // Do something..
    }
}

将意图过滤器应用于清单声明的广播接收器以侦听两个操作:

<action android:name="android.intent.action.ACTION_SHUTDOWN"/>
<action android:name="android.intent.action.QUICKBOOT_POWEROFF"/>
于 2019-07-31T10:18:11.817 回答
1

在 initrc 中触发你的 c 服务:

  1. 按属性触发:

    在属性上:sys.shutdown.requested=*
    停止 cnss-daemon

  2. 关闭关键触发

shutdown <shutdown_behavior> 设置服务进程的关闭行为。如果未指定,则在关闭过程中使用 SIGTERM 和 SIGKILL 终止服务。shutdown_behavior 为“critical”的服务在关机期间不会被杀死,直到关机超时。当关闭超时时,即使标记为“关闭严重”的服务也会被杀死。当关闭启动时标记为“关闭关键”的服务未运行时,它将启动。

于 2019-07-31T12:05:18.313 回答