Androidのシャットダウンコマンドを自分で実装する



Implement Android Shutdown Command Yourself



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) static void android_os_Power_shutdown(JNIEnv *env, jobject clazz) { sync() #ifdef HAVE_ANDROID_OS reboot(RB_POWER_OFF) #endif }関連する権限を追加する必要があります。 android:sharedUserId = 'android.uid.system'

しかしからapkシャットダウンが実装されている場合、手動シャットダウンほど良くありません。
だから自分でやる、次のようなものを書くシャットダウン小さなコマンド、実装も非常に簡単です、
システムがシャットダウンをどのように処理するかを調べてください。そうすれば、そのコードを取り出すことができます。

シャットダウン部分を処理するためのシステム内のコードパス:フレームワーク/ベース/コア/jni/android_os_Power.cppあります
android_os_Power_shutdown
方法は次のとおりです。

#include #include #include #include #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 }1つあることを確認してくださいリブート 機能し、これを追跡する再起動(RB_POWER_OFF) 関数、最終的に呼び出されることを確認してください__リブート この機能
(アセンブルされた実装)、「適切な」パラメータを渡すだけです。

コード:
1、にアンドロイドソースディレクトリ内パッケージ/アプリ/たとえば、次の場所にディレクトリを作成します。こんにちは
、書くAndroid.mkファイル: LOCAL_PATH:= $(my-dirを呼び出す)
$(CLEAR_VARS)を含める
LOCAL_SRC_FILES:= shutdown.c
LOCAL_MODULE:=シャットダウン
LOCAL_PRELINK_MODULE:= false
LOCAL_SHARED_LIBRARIES:= libutils
$(BUILD_EXECUTABLE)を含める
3、書くshutdown.cソースファイルは次のとおりです。
 padIn with a restart command (reboot), I thought it should also be related to the machine command, but there is no such thing as looking for it.shutdownpoweroffWait for the order. Then think ofbusyboxThere is one inpoweroffCommand, so I compiled another one.busyboxAdvance, executedbusybox poweroffAfter looking at the return code Yes0(which isecho $?), then, nothing happened...  The popular method on the Internet is atJavaSend the request to shut downIntent,as follows:  
4んん
5
生成されますシャットダウンにプッシュされた実行可能プログラムパッド中間/ system / binただ行く。

6
そして、他のコマンドと同じように実行できます。adbシェルのシャットダウン