reboot-android在jni中调用system()函数

问题描述

android在jni中调用system()函数

想在android程序中实现设备的重启。
android在jni(c++写的)中调用system("reboot"),但是调试时,程序执行到此无任何反应,并继续执行了下面的代码。也试过了其他方法,如:android_reboot(ANDROID_RB_RESTART,0,0);
仍然无法实现重启。
想问各位有什么好办法解决吗?

解决方案

题主可以参考源码中 关机键按下时所执行的代码,印象中是一个叫做shutdownThread的东西,也可以获得系统权限,然后发关机广播来实现。

解决方案二:

                Log.d(TAG, "halt...");
                Intent intent1 = new Intent();
                intent1.setAction("android.intent.action.ACTION_REQUEST_SHUTDOWN");
                intent1.putExtra("android.intent.extra.KEY_CONFIRM",false);
                intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                getApplicationContext().startActivity(intent1);

这个广播需要系统权限, android:sharedUserId="android.uid.system" ,和关机权限: <uses-permission android:name="android.permission.SHUTDOWN"/>, 如何编译具有系统签名的app,题主自己搜索一下。

解决方案三:

执行reboot命令没有root权限,不知道楼主现在解决了没有

时间: 2024-08-06 21:56:52

reboot-android在jni中调用system()函数的相关文章

Android在JNI中使用ByteBuffer的方法

  Android在JNI中使用ByteBuffer的方法 本文实例讲述了Android在JNI中使用ByteBuffer的方法.分享给大家供大家参考.具体如下: 一.ByteBuffer 定义 在NIO中,数据的读写操作始终是与缓冲区相关联的(读取时信道(SocketChannel)将数据读入缓冲区,写入时首先要将发送的数据按顺序填入缓冲区) 缓冲区是定长的,基本上它只是一个列表,它的所有元素都是基本数据类型.ByteBuffer是最常用的缓冲区,它提供了读写其他数据类型的方法,且信道的读写方

Android在JNI中使用ByteBuffer的方法_Android

本文实例讲述了Android在JNI中使用ByteBuffer的方法.分享给大家供大家参考.具体如下: 一.ByteBuffer 定义 在NIO中,数据的读写操作始终是与缓冲区相关联的(读取时信道(SocketChannel)将数据读入缓冲区,写入时首先要将发送的数据按顺序填入缓冲区) 缓冲区是定长的,基本上它只是一个列表,它的所有元素都是基本数据类型.ByteBuffer是最常用的缓冲区,它提供了读写其他数据类型的方法,且信道的读写方法只接收ByteBuffer. ByteBuffer有以下几

android 源码中使用System.loadLibrary加载第三方库

问题描述 android 源码中使用System.loadLibrary加载第三方库 我在android源码中编译一个apk,使用了几个第三方库文件,下面是Android.mk文件内容: LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := debug optional eng LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_PACKAGE

在C#中调用Win32函数EnumWindows枚举所有窗口。

原文 http://www.cnblogs.com/mfm11111/archive/2009/06/30/1514322.html 开发旺旺群发软件,难点及重要技术点分析(一) 一.        在C#中调用Win32函数EnumWindows枚举所有窗口. EnumWindows 函数通过借助于应用程序定义的回调函数传递每个窗口句柄枚举所有顶层的屏幕窗口.直到最后一个顶层窗口被枚举或者回调函数返回false ,EnumWindows 函数才会退出停止枚举过程. 下面例子说明如何在 C# 中

《Effective C++》读书笔记09:绝不在构造和析构过程中调用virtual函数

首先明确一下,对于一个继承体系,构造函数是从基类开始调用了,而析构函数则正 好相反,从最外层的类开始. 对于在构造函数中调用virtual函数,先举个例子: 1 class Transaction //所有交易的基类 2 { 3 public: 4 Transaction(); 5 virtual void logTransaction() const = 0;//日志记 录,因交易类型的不同而有不同的记录 6 } 7 8 Transaction::Transaction()//构造函数实现 9

为什么要在cs文件中调用js函数

问题描述 我有个问题想问下大家,为什么有的时候要在cs文件中调用js函数,还有有时候要在js里面调用cs函数,一直比较迷惑,不是太清楚,能举个例子详细的介绍下吗谢谢了 解决方案 解决方案二:js调用cs的函数是ajax,cs调用js的函数,有时是为了实现某个特定的效果,才会这么做解决方案三:谢谢你的回答,不过能说得再详细点吗,我刚开始学习,好多地方不明白谢谢解决方案四:当然是实现需求了.服务端输出JS最典型的是response.write("<script>alert('notice

android在程序中调用另一个apk行不行?

问题描述 android在程序中调用另一个apk行不行? android在程序中调用另一个apk行不行?如果行,请问怎么实现? 解决方案 参考:http://www.cnblogs.com/winxiang/archive/2012/05/04/2482883.html 解决方案二: http://www.cnblogs.com/winxiang/archive/2012/05/04/2482883.html 解决方案三: 可以,看你想实现什么功能了. 解决方案四: 这个很容易 利用Intent

link中调用自定义函数为什么不能是C#的函数?

问题描述 link中调用自定义函数为什么不能是C#的函数? link中调用自定义函数为什么不能是C#的函数? 解决方案 因为linq是放在数据库端查询的,而C#代码是本地执行的,没法翻译成sql

有一个类中的函数是protected的,我需要在另外一个类中调用这个函数如何实现

问题描述 有一个类中的函数是protected的,我需要在另外一个类中调用这个函数如何实现 一个类中的函数的修饰符为protected protected: BOOL RegisterWindowClass(); LRESULT SendMessageToParent(int nRow, int nCol, int nMessage); BOOL InvalidateCellRect(const CCellID& cell); 我需要在另外一个对话框类中访问这个类,请问如何实现谢谢了.