2 u013547134 u013547134 于 2014.04.23 15:35 提问

android在jni中调用system()函数

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

3个回答

echojiangyq
echojiangyq   2014.04.26 00:04

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

u013547134
u013547134 有看过相关的源码,源码中也是在jni层调用了android_reboot函数实现的重启,但是我在自己的程序中调用此函数就没反应,也不报错,这句代码后面的代码也可以正常执行。
3 年多之前 回复
echojiangyq
echojiangyq   2014.05.06 10:46
                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,题主自己搜索一下。

u013547134
u013547134 谢谢,但是我是想在jni中实现关机或重启,不想在上层apk中发广播,参考了系统里面的实现方法,但是不起作用。
3 年多之前 回复
u012700312
u012700312   2015.09.27 08:05

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!