与iOS不同,Android开发中可以有很多的私有方法暴露给开发者,操作设备的硬件,例如开,关机重启等等.
以下代码,需要手机Root过后才可生效.
创建工程:
在布局文件中创建两个Button
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/powerOffBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Power Off"
tools:layout_editor_absoluteX="16dp"
tools:layout_editor_absoluteY="16dp" />
<Button
android:id="@+id/rebootBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="80dp"
android:text="Reboot"
app:layout_constraintTop_toBottomOf="@+id/powerOffBtn"
tools:layout_editor_absoluteX="16dp" />
</android.support.constraint.ConstraintLayout>
对应的Activity文件
package com.example.iwan.myapplication
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.Toast
class MainActivity : AppCompatActivity() {
private var powerOffBtn:Button? = null
private var rebootBtn:Button? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
this.powerOffBtn = findViewById(R.id.powerOffBtn)
this.rebootBtn = findViewById(R.id.rebootBtn)
/*点击了关机按钮*/
this.powerOffBtn!!.setOnClickListener {
Runtime.getRuntime().exec(arrayOf("su", "-c", "reboot -p"))
}
/*点击了重启按钮*/
this.rebootBtn!!.setOnClickListener {
Runtime.getRuntime().exec(arrayOf("su","-c","reboot "))
}
}
}
最重要的是:此操作需要在AndroidManifest.xml文件中进行授权声明
如下所示:
模拟器测试如下:
点击之后弹出获取Root权限,点击允许,则进入全部重启,关机状态.
使用Android开发中的Runtime来调用私有的API空着设备硬件,来进行重启,关机的操作.
Runtime.getRuntime().exec(arrayOf("su", "-c", "reboot -p")) // 关机
Runtime.getRuntime().exec(arrayOf("su","-c","reboot ")) // 重启
Android的内核为Linux,实际上su为转换为超级管理员用户.类似Linux命令.
Demo下载地址:https://github.com/CarsonChen0312/AndroidReBootShutDownDemo